Java 8 Stream Collectors groupingBy 示例
2017-06-18 11:51
267 查看
展示如何使用Java 8 Stream
分组,计数和排序
1.1分组
Java8Example1.java
Output
1.2添加排序。
Java8Example2.java
Output
“分组”用户定义的对象列表的示例。
2.1 Pojo。
Item.java
2.2 按姓名+数字或数量组合。
Java8Examples3.java
Output
2.2按价格分组 -
Java8Examples4.java
Output
Collectors进行分组,计数,总和和排序
List
分组,计数和排序
1.1分组
List并显示其总数。
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
{ 番木瓜= 1,橙= 1,香蕉= 2,苹果= 3 }
1.2添加排序。
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
{ 苹果= 3,香蕉= 2,木瓜= 1,橙= 1 }
2.List Objects
“分组”用户定义的对象列表的示例。2.1 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 按姓名+数字或数量组合。
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 { 番木瓜= 1,香蕉= 2,苹果= 3,猩猩= 1,西瓜= 1 } // Group by + Sum qty { 番木瓜= 20,香蕉= 30,苹果= 40,orang = 10,西瓜= 10 }
2.2按价格分组 -
Collectors.groupingBy以
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 +映射到Set { 19.99 = [香蕉] 29.99 = [orang,西瓜], 9.99 = [番木瓜,苹果] }
相关文章推荐
- Stream Collectors groupingBy 例子
- java8特性:Collectors.groupingBy进行分组、排序等操作
- Java 8 Collectors: groupingBy Example
- GROUP BY GROUPING SETS 示例
- 黑马程序员——Java基础——IO流笔记(PrintStream使用示例)
- JAVA8 之 Stream sorted() 示例
- group by grouping sets用法示例
- Java 8 Stream – Read a file line by line
- java8特性:Collectors.groupingBy进行分组、排序等操作 (二)
- Spark使用小结:Java版的GroupByKey示例
- Collectors.groupingBy 使用
- Java8 stream 之groupingBy() 分组排序
- Java8 Stream 归约 使用示例
- OpenERP-Java调用XML-RPC接口示例(Examples for calling XML-RPC interfaces by Java)
- Java8系列--Java Stream进阶篇(collector、collectors、colltect的关系)
- java8 stream distinct by key
- Java8 Stream的终止操作使用示例
- Java_io体系之PrintStream简介、走进源码及示例——09
- 将Java代码重构为Java8 Stream 风格三则示例
- Java8 Stream API之创建Stream示例