`
y806839048
  • 浏览: 1120720 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

stream聚合groupingBy的使用

阅读更多

 

 

static <T, K, D, A, M extends Map<K, D>>

    Collector<T, ?, M> groupingBy(Function<? super T, ? extends K> classifier,

                                  Supplier<M> mapFactory,

                                  Collector<? super T, A, D> downstream) 

    

    参数介绍

        M 是返回结果的类型,是Map的子类。分组的结果是Map

        T 是流中元素的类型

        K 是结果Map的key的类型

        A 是结果value的类型

        D 是结果Map的value的容器结果类型

        

        classifier是将流中元素转为结果Map的key   方法体或函数对象-----------------key

        mapFactory是结果的map------------------返回类型

        downstream是整理map的value,因为有可能是多级分组,所以也是Collector-----------value

 

 

 

 

//统计集合重复元素出现次数,并且去重返回hashmap

Map<String, Long> map = list.stream().

    collect(Collectors.groupingBy(Function.identity(),Collectors.counting()));

System.out.println(map);

 

 

 //groupingBy

        Map<String, List<Person>> tempMap = Stream.of(new Person("1", "aa", "12"), new Person("1", "bb", "13"), new Person("3", "cc", "14"))

                .collect(Collectors.groupingBy(x -> x.id));

        for (String s : tempMap.keySet()) {

            tempMap.get(s).stream().forEach(x -> System.out.println(x));

        }

 

//多个条件重复

 

Map<Integer,Map<String,List<DocLotDetail>>> amp  = docLotDetailLists.parallelStream().

collect(Collectors.groupingBy(DocLotDetail::getGroupOrder,Collectors.groupingBy(DocLotDetail::getBaseValueName)));

 

 

 参考:

https://www.jianshu.com/p/a6464a5d37e0

https://www.cnblogs.com/tanhao/p/9363561.html

https://blog.csdn.net/wild46cat/article/details/73477056

 

 

分享到:
评论

相关推荐

    Java8 stream 中利用 groupingBy 进行多字段分组求和案例

    通过以上示例,我们可以看到Java 8的Stream API和`groupingBy`方法在处理数据分组和聚合时的强大功能。无论是简单的单字段分组,还是复杂的多字段分组,都能够有效地帮助我们对数据进行组织和分析。同时,结合其他...

    java实现分组聚合

    如果需要按照某个属性(如日期、数量等)将数据分成不同的类别,可以使用`Stream` API的`groupingBy`方法。这个方法接收一个函数作为参数,该函数定义了如何从原始对象中提取分组键。例如,如果你有一个包含订单对象...

    Java Stream全面讲解

    在Java中,Stream主要用于处理大量数据,它可以与集合、I/O通道等多种数据源交互,提供了丰富的操作接口来过滤、映射、聚合等。Stream API首次在Java 8中引入,极大地提升了代码的简洁性和可读性。 Java中的Stream...

    java Stream 流使用

    .collect(Collectors.groupingBy(Person::getGender)); Map, Map, List&lt;Person&gt;&gt;&gt; regionAndGenderGrouped = personList.stream() .collect(Collectors.groupingBy(Person::getRegion, Collectors.groupingBy...

    使用List和Stream完成统计计算.zip

    - 统计出现次数:`Map, Long&gt; countMap = list.stream().collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));` 6. **使用XMind进行Lambda表达式总结**:XMind是一款强大的思维导图工具...

    Stream_Java8.pdf

    4. **按性别或地区对员工进行分组**:使用`groupingBy`方法进行分组。 ```java Map, List&lt;Employee&gt;&gt; groupedByGender = employees.stream() .collect(Collectors.groupingBy(Employee::getGender)); Map, List...

    讲透JAVAStream的collect用法与原理远比你想象的更强大

    例如,如果你想要将员工按部门分组并统计每个部门的人数,可以使用`Collectors.groupingBy`与`Collectors.counting`组合: ```java Map, Long&gt; departmentCount = employees.stream() .filter(employee -&gt; "上海" ...

    java8 stream的分组功能实例介绍

    Java 8 Stream 的分组功能是通过使用 Collectors.groupingBy() 方法实现的。该方法可以将 Stream 中的元素按照某个或多个条件分组,例如按照学生的班级、年龄、性别等条件分组。 下面是一个简单的示例代码,演示了...

    java8Stream方法简介-源码.rar

    此外,`groupingBy()`方法可以用于按指定字段进行分组,`joining()`则用于连接字符串。 在源码分析中,我们可以看到Stream API如何与集合类交互,了解其内部实现原理,如并行流(Parallel Stream)如何利用多核CPU...

    684.682.JAVA基础教程_动态代理与Java8新特性-Stream的终止操作:收集(684).rar

    4. `Collectors.groupingBy()`:根据指定的函数对元素进行分组,返回一个Map,键是分组依据,值是该组的元素集合。 5. `Collectors.reducing()`:使用指定的BinaryOperator进行累积计算,例如求和、求最大值等。 ...

    JAVA8 stream中三个参数的reduce方法对List进行分组统计操作

    .collect(Collectors.groupingBy(Foo::getName, Collectors.reducing( new Bar(), // identity (bar, foo) -&gt; { bar.getCount().increment(); // 增加计数 bar.getTypeValues().add(foo.getTypeValue()); // ...

    java8stream源码-Streams:JavaStream概览

    - 选择合适的收集器进行数据聚合,如 `Collectors.toList()` 或 `Collectors.groupingBy()`。 通过深入了解 Java 8 Stream API 及其源码实现,开发者可以更有效地处理大数据,提高代码的可读性和可维护性。在实际...

    Java-Stream:在Java中使用Stream的程序

    - 分组(Grouping):`groupingBy()`根据指定条件对元素进行分组。 - 分区(Partitioning):`partitioningBy()`按条件将元素分为真和假两部分。 4. **并行流(Parallel Streams)** - 并行流利用多核处理器优势...

    stream:找到第一个不重复的字符

    这可以通过使用Collectors.groupingBy()和Collectors.counting()来完成。 3. **过滤重复项**:然后,我们需要过滤出只出现一次的字符。这可以通过`filter()`方法和一个谓词来实现,谓词检查Map中的值是否等于1。 4...

    collectionJava源码-stream_again:演示源代码,以了解有关Java8StreamAPI的更多信息,以用于Collect

    2. **中间操作**:包括过滤(`filter()`)、映射(`map()`)、排序(`sorted()`)、分组(`groupingBy()`)等。这些操作可以链接在一起,形成一个数据处理流水线。例如,`stream.filter(s -&gt; s.startsWith("A")).map...

    spring_mongodb_aggregation_grouping:这是一个用于在mongodb中显示聚合分组的简单项目

    - Java 8 Stream API与MongoDB聚合的结合使用 - 使用Maven或Gradle构建Java项目 - 单元测试和集成测试聚合操作 总之,"spring_mongodb_aggregation_grouping"项目是一个很好的起点,帮助开发者掌握在Spring环境中...

    java大作业之词频统计

    最后,使用`groupingBy()`和`count()`组合收集每个单词出现的次数。 4. **函数式编程**: Java 8的Stream API体现了函数式编程的思想,它鼓励使用无状态和无副作用的函数,使得代码更易于测试和理解。在这个项目中...

    java-434107.pdf

    5. **collect(聚合)**:collect方法用于聚合流中的元素,通常与groupingBy一起使用,用于按指定字段对元素进行分类: ```java Map, List&lt;UserPo&gt;&gt; groupByScoreMap = list.stream() .filter(p -&gt; null != p....

    Java 8 常用语法教程

    统计集合中具有特定属性的元素数量,可以使用`groupingBy()`和`counting()`方法。例如,要统计`Rolemenu`对象按`roleid`分组的数量,先创建一个流,然后通过`groupingBy()`方法根据`Rolemenu::getRoleid`分组,再用`...

Global site tag (gtag.js) - Google Analytics