分组

转载自:http://blog.csdn.net/u013078669/article/details/52717142

  1. 分组, 计数和排序

1.1 分组, 计数

[java] view plain copy
public static void main(String[] args) {

//3 apple, 2 banana, others 1
List items =
Arrays.asList("apple", "apple", "banana",
"apple", "orange", "banana", "papaya");

Map result =
items.stream().collect(
Collectors.groupingBy(
Function.identity(), Collectors.counting()
)
);

System.out.println(result);

}
/string>
输出
[text] view plain copy
{
papaya=1, orange=1, banana=2, apple=3
}
1.2 分组, 计数和排序

[java] view plain copy
public static void main(String[] args) {

//3 apple, 2 banana, others 1
List items =
Arrays.asList("apple", "apple", "banana",
"apple", "orange", "banana", "papaya");

Map result =
items.stream().collect(
Collectors.groupingBy(
Function.identity(), Collectors.counting()
)
);

Map finalMap = new LinkedHashMap<>();

//Sort a map and add to finalMap
result.entrySet().stream()
.sorted(Map.Entry.comparingByValue()
.reversed()).forEachOrdered(e -> finalMap.put(e.getKey(), e.getValue()));

System.out.println(finalMap);

}

输出:
[text] view plain copy
{
apple=3, banana=2, papaya=1, orange=1
}
2.用户自定义对象集合分组, 计数、排序和求和

[java] view plain copy
public static void main(String[] args) {

//3 apple, 2 banana, others 1
List 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 counting = items.stream().collect(
Collectors.groupingBy(Item::getName, Collectors.counting()));

System.out.println(counting);

Map sum = items.stream().collect(
Collectors.groupingBy(Item::getName, Collectors.summingInt(Item::getQty)));

System.out.println(sum);

}
lt;/string>
输出
[text] view plain copy
//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
}
[java] view plain copy
public static void main(String[] args) {

//3 apple, 2 banana, others 1
List 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> groupByPriceMap =
items.stream().collect(Collectors.groupingBy(Item::getPrice));

System.out.println(groupByPriceMap);

// group by price, uses 'mapping' to convert List to Set
Map<BigDecimal, Set> result =
items.stream().collect(
Collectors.groupingBy(Item::getPrice,
Collectors.mapping(Item::getName, Collectors.toSet())
)
);

System.out.println(result);

}

输出
[text] view plain copy
{
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]
}

posted @ 2024-06-25 21:30  自在现实  阅读(59)  评论(0)    收藏  举报