返回 Map 的 Java 流

Par*_*dam 3 java java-stream

如何使用 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)

Hul*_*ulk 5

如果您可以使用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)