Stream流常用写法和技巧

筛选出List里面某个字段的值并去重
List<String> existExamNoList = students.stream()
                            .map(ExamStudent::getExamNo)
                            .distinct()
                            .collect(Collectors.toList());
筛选集合中符合条件的唯一对象
AnalysisTaskPo taskPo = analysisTaskPoList.stream()
                        .filter(analysisTask -> analysisTask.getUniqueCode().equals(compareCode))
                        .findFirst().get();
根据集合中某个字段进行分组

根据集合中的AnalysisTaskPo对象的getAiffdz字段进行分组,分组结果groupedByAiffdz这个map的Key是getAiffdz这个分组字段的值

// 使用Stream API和groupingBy收集器进行分组
Map<String, List<AnalysisTaskPo>> groupedByAiffdz = compareAnalysisList.stream()
    .collect(Collectors.groupingBy(AnalysisTaskPo::getAiffdz));

// 输出结果
groupedByAiffdz.forEach((key, value) -> System.out.println("Key: " + key + ", Values: " + value));
根据某个条件查询集合中的某个元素
// 使用 Stream API 进行过滤
Optional<TwoOriginFilePo> result = originFileList.stream()
        .filter(originFile -> originFile.getMc().toLowerCase().equals(posFile.getMc().toLowerCase()))
        .findFirst();

// 检查是否找到了匹配的对象
if (result.isPresent()) {
    TwoOriginFilePo twoOriginFilePo = result.get();
    MergeUtil.merge(posFile, twoOriginFilePo);
}
调用第三方接口时传参
JSONArray spotJsonArray = new JSONArray();
List<JSONObject> analysisSpotList = twoAnalysePos.stream()
     .map(twoAnalysePo -> {
         JSONObject spotJson = new JSONObject();
         spotJson.put("bsm", twoAnalysePo.getTbbsm());
         spotJson.put("issued", 1);
         return spotJson;
     }).collect(Collectors.toList());
spotJsonArray.addAll(analysisSpotList);
把一个集合的某些字段抽离出来封装成一个新的集合

首先要给要抽离出来的某些字段封装成一个新的对象,例如我这里的MapTaskVO

List<MapTaskVO> mapTaskVOS = allMapList.stream().map(allMapTask -> new MapTaskVO(allMapTask.getId(), allMapTask.getYpdz())).collect(Collectors.toList());
将集合中的每个元素的某个字段拼接成一个字符串
//List<DemandTransfer>
String result = demandTransferList.stream()
    .map(DemandTransfer::getTransferDeptName)
    .collect(Collectors.joining("、"));

//List<String>
String btbsm = dtbsmList.stream()
.map(String::toString)
.collect(Collectors.joining(","));
判断两个集合所有元素的某个字段是否相同【anyMatch】

这里的业务场景是导入的时候,要判断导入的list和数据库查询的list里面的元素是否有重复的,通常就是根据id或者某个唯一字段去判断

// 查询已经存在的所有企业
List<DemandCompany> demandCompaniesDaoList = demandCompanyMapper.selectList(null);
Iterator<DemandCompany> iterator = demandCompanies.iterator();
while (iterator.hasNext()){
    DemandCompany demandCompany = iterator.next();
    //更新已经存在的企业信息【存在就更新,不存在就新增】
    boolean isExist = demandCompaniesDaoList.stream().anyMatch(company -> company.getCompanyUniscid().equals(demandCompany.getCompanyUniscid()));
}
把字符串分割成数组后过滤掉后变成list
// 把字符串分割成数组后过滤掉后变成list
List<String> meetingReminderArr = Arrays
  .stream(meetingReminder.split(","))
  .filter(StringUtils::isNotBlank)
  .collect(Collectors.toList());
filter过滤数据
 //过滤出导入失败的数据(用于导出)
List<GroupPerson> failGroupPersonList = groupPersonList.stream()
        .filter(groupPerson -> groupPerson.getImpState().equals("0"))
        .collect(Collectors.toList());

 // 校验groupPersonList是否存在多个属性都为null的情况
  boolean hasMultipleNullProperties = groupPersonList.stream()
          .anyMatch(person -> person.getUserName() == null && person.getPhone() == null);

//把枚举类的值收集成一个map
Arrays.stream(ConferenceReminderTimeEnum.values()).collect(Collectors.toMap(e -> e.value, e -> e))

好文参考:stream流的介绍和使用-CSDN博客

好文参考:Stream流使用-CSDN博客

### Java 常用语法总结 #### 使用泛型简化代码 Java 中可以通过泛型来定义类型安全的集合类。例如,`List<String>` 表示一个存储字符串类型的列表。这种写法被称为语法糖,它使得代码更加简洁易读[^1]。 ```java List<String> list = new ArrayList<>(); list.add("example"); ``` #### 式编程简介 自 Java 8 起引入了式编程的概念,允许开发者以声明式的风格处理数据集合。操作通常分为中间操作终端操作两种形式。常见的方法包括 `filter`、`map` `reduce` 等[^2]。 下面是一个简单的例子,展示如何利用对集合进行过滤并映射: ```java List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); numbers.stream() .filter(n -> n % 2 == 0) // 过滤偶数 .map(n -> n * 2) // 将每个偶数乘以 2 .forEach(System.out::println); // 输出结果 ``` #### Optional 类的应用 为了减少空指针异常的发生频率,Java 提供了一个名为 `Optional` 的容器类。它可以用来表示可能为空的对象实例,并提供了诸如 `filter` `map` 方法用于条件判断以及转换逻辑[^3]。 以下是一段演示代码,说明当对象存在时才执行某些特定的操作: ```java User user = new User(); user.setAge(18); user.setName("Tom"); System.out.println( Optional.ofNullable(user) .filter(u -> u.getAge() >= 18) // 判断年龄是否大于等于 18 .map(User::getName) // 获取用户名字 .orElse("Unknown") // 如果不存在则返回默认值 "Unknown" ); ``` #### 总结 上述内容涵盖了部分常用的 Java 编程技巧,其中包括但不限于泛型机制、式 API 及其相关方法应用还有针对潜在 NullPointerException 设计的安全模式——即 Optional 容器类的功能介绍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好运仔dzl

打赏有用的话还要工作干嘛

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值