准备model类,生成list添加数据备用
public class TestModel {
private String id;
private String name;
private Integer age;
list部分操作
//list分组转map
Map<Integer, List<TestModel>> collect1 = list.stream()
.collect(Collectors.groupingBy(TestModel::getAge));
collect1.forEach((k,v) -> System.out.print(k + ":" + v + ";"));
//list转map时去重: 使用(k1,k2) -> k1设置key重复时保留前一个
Map<Integer, TestModel> collect2 = list.stream()
.collect(Collectors.toMap(TestModel::getAge,a -> a, (k1,k2) -> k1));
collect2.forEach((k,v) -> System.out.print(k + ":" + v + ";"));
//list转map取某个字段
Map<Integer, String> collect21 = list.stream()
.collect(Collectors.toMap(TestModel::getAge,TestModel::getName));
collect21.forEach((k,v) -> System.out.print(k + ":" + v + ";"));
//list转map:当k或者v可能为空值时
Map<Integer, String> collect22 = list.stream().collect(HashMap::new,
(k, v) -> k.put(v.getAge(), v.getName()), HashMap::putAll);
collect22.forEach((k,v) -> System.out.print(k + ":" + v + ";"));
//根据部分字段去重
List<TestModel> collect3 = list.stream().collect(Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(
Comparator.comparing(o -> (o.getName() + o.getAge())))),
ArrayList::new
));
collect3.forEach(System.out::println);
//取某字段集合
List<String> collect4 = list.stream().map(TestModel::getName).collect(Collectors.toList());
collect4.forEach(System.out::println);
//移除姓名为空的
list.removeIf(o -> null == o.getName());
//过滤
List<TestModel> collect5 = list.stream().filter(t -> t.getAge() < 26)
.collect(Collectors.toList());
collect5.forEach(System.out::println);
//排序:不能为null
list.sort(Comparator.comparing(TestModel::getAge).reversed());
//排序时指定null的位置
list.sort(Comparator.comparing(TestModel::getAge,Comparator.nullsFirst(Integer::compare)));
list.sort(Comparator.comparing(TestModel::getAge,Comparator.nullsLast(Integer::compare)));
//按指定顺序排序:如一个正序一个倒序
list.stream().sorted(Comparator.comparing(User::name,Comparator.reverseOrder()).thenComparing(User::age,Comparator.reverseOrder()));
//最大最小
Optional<TestModel> max = list.stream().filter(t -> null != t.getAge())
.max(Comparator.comparing(TestModel::getAge));
max.ifPresent(System.out::println);
//求和
Integer reduce = list.stream().map(TestModel::getAge)
.filter(Objects::nonNull).reduce(0, Integer::sum);
System.out.println(reduce);
//分组求和
Map<Long, Long> childMap = boxUnreadNumbers.stream()
.filter(o -> null != o.getParentBoxId())
.collect(Collectors.groupingBy(UserResult::getParentBoxId, Collectors.summingLong(UserResult::getNumber)));
//字符串转字符串数组,再转Long列表
List<Long> whiteList = Arrays.stream(stringList.split(","))
.map(s -> Long.parseLong(s.trim()))
.collect(Collectors.toList());
//取某个字段使用指定符号拼接,这里id需要转换成字符串
String ids = list.stream().filter(i -> null != i.getLeagueStoreId())
.map(a -> a.getId() + "")
.collect(Collectors.joining("|"));
//也可以先取出集合,再拼接
Set<Long> idsSet = list.stream().map(InvitationDTO::getId).collect(Collectors.toSet());
String ids = idsSet.stream().map(i -> i + "").collect(Collectors.joining("|"));
分组求最大值
List<TestModel> list = new ArrayList<>();
list.add(TestModel.builder().id(1).name("a").build());
list.add(TestModel.builder().id(2).name("b").build());
list.add(TestModel.builder().id(2).name("c").build());
list.add(TestModel.builder().id(3).name("a").build());
list.add(TestModel.builder().id(4).name("c").build());
list.add(TestModel.builder().id(5).name("a").build());
list.add(TestModel.builder().id(1).name("a").build());
Map<String, TestModel> collect = list.stream()
.collect(Collectors.toMap(TestModel::getName, Function.identity(),
(c1, c2) -> c1.getId().compareTo(c2.getId()) >= 0 ? c1 : c2));
collect.forEach((k, v) -> System.out.println(k + ":" + v));