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

推荐答案

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

Java相关问答推荐

Javascript更新alert 可扩展内容样式与CSS—按钮更多/更少

为什么我们仍然需要实现noArgsConstructor如果Java默认提供一个非参数化的构造函数?''

在模拟超类中设置非setter属性的值

不推荐使用的Environment.getExternalStorageDirectory().getAbsolutePath()返回的值不同于新的getExternalFilesDir(空)?

如何确定springboot在将json字段转换为Dto时如何处理它?

与Spring Boot相关的实体未正确保存

try 判断可选参数是否为空时出现空类型安全警告

与不同顺序的组进行匹配,不重复组但分开

如何集成语义发布和BitBucket(Java项目)

Java构造函数分支

使用正则表达式从字符串中提取多个值

为什么有两种实现来检索数组类的组件类型?

根本不显示JavaFX阿拉伯字母

Java创建带有扩展通配符的抽象处理器

从LineChart<;字符串、字符串和gt;中删除数据时出现特殊的ClassCastException;

有没有办法在o(log(N))中以系统的方式将数组中的小块元素复制和移动到新增长的数组中的左侧?

无法使用Open WebStart Java 8运行jnlp

如何在右击时 Select 新行?

Java System.getProperty在哪里检索user.home?

ControlsFX RangeSlider在方向垂直时滞后