【问题标题】:Java stream returning a Map返回 Map 的 Java 流
【发布时间】:2022-06-10 18:12:27
【问题描述】:

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

【问题讨论】:

  • Map&lt;String, Integer&gt; colorToCountMap = dresses.stream().collect(Collectors.groupingBy(Dress::getColor, Collectors.summingInt(x -&gt; 1)));
  • @shmosel 谢谢,它有效!如果您可以将其发布为答案,我将很乐意接受。
  • @ParagKadam 您可以起草、发布和接受您自己问题的答案。

标签: java java-stream


【解决方案1】:

如果您可以使用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,您可以使用cmets 中提到的Collectors.summingInt(x -&gt; 1)

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2010-10-28
      • 1970-01-01
      • 2019-07-07
      • 2012-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-02
      • 2022-06-18
      相关资源
      最近更新 更多