java8部分操作记录

准备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)));

//最大最小
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)));

猜你喜欢

转载自blog.csdn.net/machao0_0/article/details/120711243
今日推荐