简体   繁体   English

返回 Map 的 Java 流

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM