Java常用代码片段

本文介绍使用Java进行集合操作的各种高效方法,包括字符串按长度分割、快速创建Map、集合的交集、并集和差集计算、集合拆分、分组统计及分批处理数据等实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java字段片段

字符串

按长度分割

//com.google.common.base.Splitter
Iterable<String> list = Splitter.fixedLength(3).split("stringvalue");
System.out.println(list);//[str, ing, val, ue]

集合

快速创建Map

//com.google.common.collect.ImmutableMap
Map<String, ArrayList<String>> map1 = ImmutableMap.of("list", new ArrayList<>());
Map<String, Integer> map2 = ImmutableMap.<String, Integer>builder().put("key1", 1).put("key2", 2).build();

交集、并集和差集

//com.google.common.collect.Sets
Set<Integer> sets1 = Sets.newHashSet(1, 2, 3, 4, 5);
Set<Integer> sets2 = Sets.newHashSet(4, 5, 6, 7, 8, 9);
//交集 [4, 5]
System.out.println(Sets.intersection(sets1, sets2));
//并集 set1 + set2  [1, 2, 3, 4, 5, 6, 7, 8, 9]
System.out.println(Sets.union(sets1, sets2));
//差集 set1 - set2  [1, 2, 3]
System.out.println(Sets.difference(sets1, sets2));

集合拆分

将一个大的集合按指定数量拆分成若干个小集合,分批执行

//com.google.common.collect.Lists
List<List<String>> partition1 = Lists.partition(Lists.newArrayList("a", "b", "c", "d", "e"), 2);
System.out.println(partition1);//[[a, b], [c, d], [e]]

//com.google.common.collect.Iterables
Iterable<List<String>> partition2 = Iterables.partition(Lists.newArrayList("a", "b", "c", "d", "e"), 2);
System.out.println(partition2);//[[a, b], [c, d], [e]]
//com.google.common.collect.Iterables
//org.apache.commons.collections4.CollectionUtils
public static <T> Stream<List<T>> partitionStream(Collection<T> coll, int size) {
  if (CollectionUtils.isEmpty(coll)) {
    return Stream.empty();
  }
  return StreamSupport.stream(Iterables.partition(coll, size).spliterator(), false);
}

分组统计

List<String> items = Arrays.asList("a", "b", "b", "b", "c", "c", "c");
Map<String, Long> result2 = items.stream().collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
System.out.println(result2);//{a=1, b=3, c=3}

分批处理数据

在程序经常会处理集合数据,有时直接处理整个集合并不是很好的主意,通常需要分批次处理。比如在批量查询/插入数据到数据库的时候。

import com.google.common.collect.Iterables;
import org.apache.commons.collections4.CollectionUtils;

import java.util.Collection;
import java.util.List;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;

public static <T> Stream<List<T>> partitionStream(Collection<T> coll, int size) {
  if (CollectionUtils.isEmpty(coll)) {
    return Stream.empty();
  }
  return StreamSupport.stream(Iterables.partition(coll, size).spliterator(), false);
}
//Guava集合分组
List<String> list = new ArrayList<>();
//按每50个一组分割
List<List<String>> parts = Lists.partition(list, 50);

分组统计

有时候我们拿到一个集合,里面有重复的元素,想统计每个元素的个数,如何做?

简单集合

List<String> items = Arrays.asList("a", "b", "b", "b", "c", "c", "c");
Map<String, Long> result2 = items.stream().collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
System.out.println(result2);//{a=1, b=3, c=3}

实体集合

通过用TreeMap接收结果实现排序功能

List<VisitorLogs> visitorLogs = Lists.newArrayList(
                new VisitorLogs("2020-06-27", 8),
                new VisitorLogs("2020-06-27", 9),
                new VisitorLogs("2020-06-30", 7),
                new VisitorLogs("2020-06-30", 9),
                new VisitorLogs("2020-06-30", 1),
                new VisitorLogs("2020-07-05", 1),
                new VisitorLogs("2020-07-05", 8),
                new VisitorLogs("2020-07-05", 6));

TreeMap<String, Integer> collect = visitorLogs.stream().collect(Collectors.groupingBy(d -> d.getTime(), TreeMap::new, Collectors.summingInt(o -> o.getCount())));
System.out.println(collect);//{2020-06-27=13, 2020-06-30=17, 2020-07-05=15}

@Data
@NoArgsConstructor
@AllArgsConstructor
public class VisitorLogs implements Comparable<VisitorLogs> {
    private String time;
    private int count;

    @Override
    public int compareTo(VisitorLogs o) {
        return time.compareTo(o.time);
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值