[英]Java stream returning a Map
How can I get the following problem solved using Java Streams?如何使用 Java Streams 解决以下问题?
Given:-鉴于:-
class Dress {
private String brandName;
private String color;
public String getBrandName() {
return brandName;
}
public String getColor() {
return color;
}
}
List<Dress> dresses = getDresses(); // API call
Required:-必需的:-
// Number of dresses per color
Map<String, Integer> colorToCountMap;
If you can live with Long
instead of Integer
, you can use Collectors.counting()
as downstream collector:如果您可以使用
Long
而不是Integer
,则可以使用Collectors.counting()
作为下游收集器:
private record Dress(String brandName, String color) {}
public static void main(String[] args) {
Map<String, Long> result = Stream.of(new Dress("One", "Red"), new Dress("Two", "Green"), new Dress("Three", "Red"))
.collect(Collectors.groupingBy(Dress::color, Collectors.counting()));
result.forEach((k,v) -> System.out.println(k + ": " + v));
}
If it has to be Integer
, you can use Collectors.summingInt(x -> 1)
as mentioned in the comments:如果它必须是
Integer
,您可以使用评论中提到的Collectors.summingInt(x -> 1)
:
Map<String, Integer> result = Stream.of(new Dress("One", "Red"), new Dress("Two", "Green"), new Dress("Three", "Red"))
.collect(Collectors.groupingBy(Dress::color, Collectors.summingInt(x -> 1)));
You can get Map<String, Integer>
map using following code您可以使用以下代码获取
Map<String, Integer>
地图
Map<String, Integer> colorToCountMap = dresses.stream().
.collect(Collectors.toMap(Dress::getColor, e -> 1, Math::addExact));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.