Java流返回地图

发布于 2025-02-06 16:10:08 字数 471 浏览 1 评论 0原文

如何使用Java流解决以下问题?

给定: -

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;

How can I get the following problem solved using 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;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

千紇 2025-02-13 16:10:08

如果您可以使用而不是整数,则可以使用 collect> collector> collectors.countors.countors.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));
}

如果它必须是整数,您可以使用collector.summingint(x - &gt; 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)));

If you can live with Long instead of Integer, you can use Collectors.counting() as downstream collector:

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:

    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)));
魄砕の薆 2025-02-13 16:10:08

您可以使用以下代码获取map&lt; string,Integer&gt;地图

        Map<String, Integer> colorToCountMap = dresses.stream().
        .collect(Collectors.toMap(Dress::getColor, e -> 1, Math::addExact));

You can get Map<String, Integer> map using following code

        Map<String, Integer> colorToCountMap = dresses.stream().
        .collect(Collectors.toMap(Dress::getColor, e -> 1, Math::addExact));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文