返回 Map 的 Java 流

标签 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

必需:-

// Number of dresses per color

Map<String, Integer> colorToCountMap;

最佳答案

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

如果它必须是 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)));

关于返回 Map 的 Java 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72571811/

相关文章:

java - 在流上执行多个逻辑

java - 当 "equality"暗示 "order doesn' t 重要时,如何编写传递比较器”?

java - 具有多个 fragment 的两个 Activity 之间的空对象引用

java - "getOutputStream() has already been called"在jsp页面内使用jnlp标签时

Java 8 流 : convert comma separated string to the list of abstract Enum

Java 8 Stream - .max() 重复

java - 找不到符号类 PoolingHttpClientConnectionManager

java - 如何在 Zookeepr 中模拟获取锁的 void 方法,并且我们还可以验证锁

java - 为什么我们需要在编码时避免突变?什么是突变?

java - 收集器.toMap IllegalStateException : Duplicate key when no duplication is possible