java stream 流分组过滤

开发中我们经常用到stream来处理数据,我们会遇到对一些数据进行分组过滤

1.场景一 对集合内多个对象单个字段进行分组

@Data
@Accessors(chain = true) //支持链式操作
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class WorkOrder {
    private Integer id;
    private String no;
    private Integer proxyId;
    private String proxyNo;
    private LocalDate planExamDate;
    private Integer totalCount;
    private Integer assignCount;
    private Integer completeCount;
    private Integer qualifiedCount;
    private Integer unqualifiedCount;
}

针对集合内对象某一个字段进行分组

Map<String, List<WorkOrder >> collect = WorkOrders.stream().collect(Collectors.groupingBy(e -> e.getProxyId());

针对集合内对象某多个字段进行分组

Map<String, List<WorkOrder >> collect = WorkOrders.stream().collect(Collectors.groupingBy(e -> e.getProxyId() + "_" + e.getSupplierBatchNo() + "_" + e.getCustomerBatchNo());

针对集合内对象某多个字段进行过滤

Map<String, List<WorkOrder >> collect = WorkOrders.stream().filter(e->e.getId.equals(1)).collect(Collectors.groupingBy(e -> e.getProxyId() + "_" + e.getSupplierBatchNo() + "_" + e.getCustomerBatchNo());

针对集合内对象过滤注意(千万不要写三元运算符)在多条件下可能会失效

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Java StreamJava 8引入的一种新型数据处理方式,它提供了一个高效、便捷、函数式的处理集合、数组等数据的方式。Stream可以让你使用类似SQL语句查询的方式来操作集合数据,它可以通过链式操作来过滤、映射、排序、分组、聚合等操作,而且可以非常方便地并行处理大数据。下面是一些常见的Stream操作: 1.筛选:filter() filter()方法用于过滤出符合条件的元素,它接收一个Predicate函数式接口作为参数,Predicate接口表示一个布尔类型的函数,用于判断元素是否符合条件。 示例: ``` List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); List<Integer> res = list.stream().filter(x -> x > 3).collect(Collectors.toList()); System.out.println(res); // [4, 5] ``` 2.映射:map() map()方法用于将一个元素转换成另外一个元素,它接收一个Function函数式接口作为参数,Function接口表示一个将一个值转换成另一个值的函数。 示例: ``` List<String> list = Arrays.asList("java", "python", "ruby"); List<Integer> res = list.stream().map(String::length).collect(Collectors.toList()); System.out.println(res); // [4, 6, 4] ``` 3.排序:sorted() sorted()方法用于对Stream进行排序,它可以接收一个Comparator函数式接口作为参数,Comparator接口表示一个比较两个值的函数。 示例: ``` List<Integer> list = Arrays.asList(3, 1, 4, 2, 5); List<Integer> res = list.stream().sorted().collect(Collectors.toList()); System.out.println(res); // [1, 2, 3, 4, 5] ``` 4.聚合:reduce() reduce()方法用于对Stream中的元素进行聚合操作,它接收一个BinaryOperator函数式接口作为参数,BinaryOperator接口表示一个将两个值合并成一个值的函数。 示例: ``` List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); int res = list.stream().reduce(0, (x, y) -> x + y); System.out.println(res); // 15 ``` 5.收集:collect() collect()方法用于将Stream中的元素收集到一个集合中,它接收一个Collector接口作为参数,Collector接口表示一个将元素收集到一个集合中的函数。 示例: ``` List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); List<Integer> res = list.stream().filter(x -> x > 3).collect(Collectors.toList()); System.out.println(res); // [4, 5] ``` 这些操作只是Stream中的一部分,Stream提供了很多高效、便捷、函数式的操作方式,可以满足各种需求。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值