如何使用 Java Streams 解决以下问题?
鉴于:-
class Dress {
private String brandName;
private String color;
public String getBrandName() {
return brandName;
}
public String getColor() {
return color;
}
}
List<Dress> dresses = getDresses(); // API call
Run Code Online (Sandbox Code Playgroud)
必需的:-
// Number of dresses per color
Map<String, Integer> colorToCountMap;
Run Code Online (Sandbox Code Playgroud)
如果您可以使用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));
}
Run Code Online (Sandbox Code Playgroud)
如果必须是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)));
Run Code Online (Sandbox Code Playgroud)