ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java-Java集合流操作

2022-08-24 08:33:02  阅读:193  来源: 互联网

标签:Java Collectors list1 List collect VehicleOrder new 集合 操作


修订记录 版本 是否发布
2020-01-25 v1.0
2021-03-19 v1.1

List分组

Map<String,List<ClassEntity>> = classEntities.stream().collect(Collectors.groupingBy(ClassEntity::getGrade));

List去重

1、单字段去重

petList = petList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(
                () -> new TreeSet<>(Comparator.comparing(PetsPetInfo::getUserId))), ArrayList::new));

2、多字段去重

java8去重(根据年级和专业,当年级和专业都相同的情况下看做是重复数据)

List<ClassEntity> distinctClass = classEntities.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getProfessionId() + ";" + o.getGrade()))), ArrayList::new));

通过hashSet去重(如将classNames去重):该种去重是bean完全相同的时候算重复数据

List<String> classNameList = new ArrayList(new HashSet(classNames));

List交集方法retainAll

public class Test {

    public static void main(String[] args) {

        List<String> list1 = new ArrayList<String>();
        List<String> list2 = new ArrayList<String>();
        List<String> list3 = new ArrayList<String>();
        for (int i = 0; i < 20; i++) {
            list1.add(i+"");
            if(i%2 == 0) {
                list2.add(i+"");
            }
            list3.add(i+"@");
        }
        // list1 与 list2 存在相同元素,list1集合只保留list2中存在的元素
        list1.retainAll(list2);
        if(list1.isEmpty()) {
            System.out.println("不包含");
        } else {
            System.out.println("包含");
        }
        System.out.println(list1);
        // list1 与 list3 不存在相同元素,list1集合变为空
        list1.retainAll(list3);
        if(list1.isEmpty()) {
            System.out.println("不包含");
        } else {
            System.out.println("包含");
        }
        System.out.println(list1);
    }
}

List 分组去重获取最新记录

public static void main(String[] args) throws InterruptedException {
    List<VehicleOrder> vehicleOrderBqList = Lists.newArrayList();
    VehicleOrder v1 = new VehicleOrder();
    v1.setDealerCode("BQ0062");
    v1.setCustomerPhone("13101030009");
    v1.setReceivedTotalMoney(new BigDecimal(0));
    v1.setUpdateTime(DateUtils.getNowLocalDateTime());
    Thread.sleep(2000);

    VehicleOrder v2 = new VehicleOrder();
    v2.setDealerCode("BQ0062");
    v2.setCustomerPhone("13101030009");
    v2.setReceivedTotalMoney(new BigDecimal(0));
    v2.setUpdateTime(DateUtils.getNowLocalDateTime());
    Thread.sleep(2000);

    VehicleOrder v3 = new VehicleOrder();
    v3.setDealerCode("BQ0062");
    v3.setCustomerPhone("13101030009");
    v2.setReceivedTotalMoney(new BigDecimal(100));
    v3.setUpdateTime(DateUtils.getNowLocalDateTime());
    Thread.sleep(2000);

    VehicleOrder v4 = new VehicleOrder();
    v4.setDealerCode("BQ0062");
    v4.setCustomerPhone("13101030009");
    v4.setReceivedTotalMoney(new BigDecimal(500));
    v4.setUpdateTime(DateUtils.getNowLocalDateTime());
    Thread.sleep(2000);

    vehicleOrderBqList.add(v1);
    vehicleOrderBqList.add(v2);
    vehicleOrderBqList.add(v3);
    vehicleOrderBqList.add(v4);

    //方式一:分组随机去重
/*    List<VehicleOrder> distinctList = vehicleOrderBqList.parallelStream()
        .collect(Collectors.collectingAndThen(Collectors.toCollection(
            () -> new TreeSet<>(Comparator.comparing(en -> en.getDealerCode() + ";" + en.getCustomerPhone()))),
            ArrayList::new));*/

    //方式二:分组去重,根据UpdateTime获取最新记录(去重规则)
    List<VehicleOrder> distinctList = Lists.newArrayList();
    distinctList = vehicleOrderBqList.parallelStream()
        .collect(Collectors.groupingBy(en -> en.getDealerCode() + ";" + en.getCustomerPhone())).values()
        .parallelStream().map(list -> list.parallelStream().max(Comparator.nullsLast(Comparator.comparing(VehicleOrder::getUpdateTime))).orElse(null)
        ).collect(Collectors.toList());

   //方式三:分组去重,根据UpdateTime获取最新记录(去重规则)
/*    vehicleOrderBqList.parallelStream()
        .collect(Collectors.groupingBy(en -> en.getDealerCode() + ";" + en.getCustomerPhone())).forEach((k, v) -> {
      VehicleOrder vvv = v.parallelStream()
          .max(Comparator.nullsLast(Comparator.comparing(VehicleOrder::getUpdateTime))).orElse(null);
      if (Optional.ofNullable(vvv).isPresent()) {
        distinctList.add(vvv);
      }
      ;
    });*/

    System.out.println(distinctList);

  }

List 分组去重获取最新记录

// 若value为空,设置默认值""
Map<String, String> map1 = list.stream().collect(
                Collectors.toMap(i -> i.getName(), i-> Optional.ofNullable(i.getSex()).orElse(""), (v1, v2) -> v1));

// 调用hashMap putAll方法, 注意key相同时,value会覆盖。
Map<String, String> map2 = list.stream().collect(
                HashMap::new, (m, i) -> m.put(i.getName(), i.getSex()), HashMap::putAll);

标签:Java,Collectors,list1,List,collect,VehicleOrder,new,集合,操作
来源: https://www.cnblogs.com/BCX-1024/p/javajava-ji-he-liu-cao-zuo.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有