Stream Collectors groupingBy 例子
2017-05-25 20:21
465 查看
在这篇文章中,我们将向您展示如何使用java 8 Stream
1.1 Group by a
Java8Example1.java
output
1.2 Add sorting.(增加排序实现)
Java8Example2.java
output
Examples to ‘group by’ a list of user defined Objects.(通过“用户定义的对象”列表进行分组的示例。)
2.1 A Pojo.
Item.java
2.2 Group by the name + Count or Sum the Qty. (name + Count分组或者 对 Qty求和分组)
Java8Examples3.java
output
2.2 Price 分组 –
Java8Examples4.java
output
References
Java 8 Stream Collectors JavaDoc
Java – How to sort a Map
Stackoverflow – Sort a Map by values (Java)
Collectors对列表分组,计数,求和和排序。
1. Group By, Count and Sort
1.1 Group by a Listand display the total count of it.(按列表分组,并显示其总数)
Java8Example1.java
package com.mkyong.java8; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; public class Java8Example1 { public static void main(String[] args) { //3 apple, 2 banana, others 1 List<String> items = Arrays.asList("apple", "apple", "banana", "apple", "orange", "banana", "papaya"); Map<String, Long> result = items.stream().collect( Collectors.groupingBy( Function.identity(), Collectors.counting() ) ); System.out.println(result); } }
output
{ papaya=1, orange=1, banana=2, apple=3 }
1.2 Add sorting.(增加排序实现)
Java8Example2.java
package com.mkyong.java8; import java.util.Arrays; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; public class Java8Example2 { public static void main(String[] args) { //3 apple, 2 banana, others 1 List<String> items = Arrays.asList("apple", "apple", "banana", "apple", "orange", "banana", "papaya"); Map<String, Long> result = items.stream().collect( Collectors.groupingBy( Function.identity(), Collectors.counting() ) ); Map<String, Long> finalMap = new LinkedHashMap<>(); //Sort a map and add to finalMap result.entrySet().stream() .sorted(Map.Entry.<String, Long>comparingByValue() .reversed()).forEachOrdered(e -> finalMap.put(e.getKey(), e.getValue())); System.out.println(finalMap); } }
output
{ apple=3, banana=2, papaya=1, orange=1 }
2. List Objects
Examples to ‘group by’ a list of user defined Objects.(通过“用户定义的对象”列表进行分组的示例。)2.1 A Pojo.
Item.java
package com.mkyong.java8; import java.math.BigDecimal; public class Item { private String name; private int qty; private BigDecimal price; //constructors, getter/setters }
2.2 Group by the name + Count or Sum the Qty. (name + Count分组或者 对 Qty求和分组)
Java8Examples3.java
package com.mkyong.java8; import java.math.BigDecimal; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; public class Java8Examples3 { public static void main(String[] args) { //3 apple, 2 banana, others 1 List<Item> items = Arrays.asList( new Item("apple", 10, new BigDecimal("9.99")), new Item("banana", 20, new BigDecimal("19.99")), new Item("orang", 10, new BigDecimal("29.99")), new Item("watermelon", 10, new BigDecimal("29.99")), new Item("papaya", 20, new BigDecimal("9.99")), new Item("apple", 10, new BigDecimal("9.99")), new Item("banana", 10, new BigDecimal("19.99")), new Item("apple", 20, new BigDecimal("9.99")) ); Map<String, Long> counting = items.stream().collect( Collectors.groupingBy(Item::getName, Collectors.counting())); System.out.println(counting); Map<String, Integer> sum = items.stream().collect( Collectors.groupingBy(Item::getName, Collectors.summingInt(Item::getQty))); System.out.println(sum); } }
output
//Group by + Count { papaya=1, banana=2, apple=3, orang=1, watermelon=1 } //Group by + Sum qty { papaya=20, banana=30, apple=40, orang=10, watermelon=10 }
2.2 Price 分组 –
Collectors.groupingByand
Collectors.mapping例子.
Java8Examples4.java
package com.mkyong.java8; import java.math.BigDecimal; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; public class Java8Examples4 { public static void main(String[] args) { //3 apple, 2 banana, others 1 List<Item> items = Arrays.asList( new Item("apple", 10, new BigDecimal("9.99")), new Item("banana", 20, new BigDecimal("19.99")), new Item("orang", 10, new BigDecimal("29.99")), new Item("watermelon", 10, new BigDecimal("29.99")), new Item("papaya", 20, new BigDecimal("9.99")), new Item("apple", 10, new BigDecimal("9.99")), new Item("banana", 10, new BigDecimal("19.99")), new Item("apple", 20, new BigDecimal("9.99")) ); //group by price Map<BigDecimal, List<Item>> groupByPriceMap = items.stream().collect(Collectors.groupingBy(Item::getPrice)); System.out.println(groupByPriceMap); // group by price, uses 'mapping' to convert List<Item> to Set<String> Map<BigDecimal, Set<String>> result = items.stream().collect( Collectors.groupingBy(Item::getPrice, Collectors.mapping(Item::getName, Collectors.toSet()) ) ); System.out.println(result); } }
output
{ 19.99=[ Item{name='banana', qty=20, price=19.99}, Item{name='banana', qty=10, price=19.99} ], 29.99=[ Item{name='orang', qty=10, price=29.99}, Item{name='watermelon', qty=10, price=29.99} ], 9.99=[ Item{name='apple', qty=10, price=9.99}, Item{name='papaya', qty=20, price=9.99}, Item{name='apple', qty=10, price=9.99}, Item{name='apple', qty=20, price=9.99} ] } //group by + mapping to Set { 19.99=[banana], 29.99=[orang, watermelon], 9.99=[papaya, apple] }
References
Java 8 Stream Collectors JavaDoc
Java – How to sort a Map
Stackoverflow – Sort a Map by values (Java)
相关文章推荐
- Java 8 Stream Collectors groupingBy 示例
- java8特性:Collectors.groupingBy进行分组、排序等操作 (二)
- Collectors.groupingBy 使用
- Java 8 Collectors: groupingBy Example
- java8特性:Collectors.groupingBy进行分组、排序等操作
- Java8 stream 之groupingBy() 分组排序
- CANoe 入门 Step by step系列(三)简单例子的剖析
- node stream api的应用,断电续传与秒传的例子
- 【Unity3D Game develop by example】简单的例子—平板接掉落球
- PPAPI开发之路(二)在VS 2013上编译media_stream_video例子
- PPAPI开发之路(三)通过本地服务发布例子:media_stream_video的PPAPI
- cocoscreate 官方例子说明 01_graphics_01_sprite_SlicedSprite by:adady
- cocoscreate 官方例子说明 02_ui_01_widget_AdvancedWidget by:adady
- SQL Connect By 的例子
- oracle stream ORA-01422 调整的一个例子
- SparkStream例子HdfsWordCount--Streaming的Job是如何调度的
- eXtend Workbench by SilverStream @ JDJ
- Storm概念学习系列之Stream消息流 和 Stream Grouping 消息流组
- PPAPI开发之路(三)通过本地服务发布例子:media_stream_video的PPAPI
- Hive_6. 数据聚合 -- Group By & Grouping_SETS & RollUp & CUBE & Having