计算要列出的字符串映射中的所有元素

Sag*_*gar 2 java java-8 java-stream

有没有更好的方法来计算地图中所有列表的大小?那么firstList.size() + secondList.size()?我已经这样做了,但创建一个仅用于计数的列表并不是正确的方法..

public static void main(String[] args) {
    List<String> firstList = new ArrayList<>();
    firstList.add("first");
    List<String> secondList = new ArrayList<>();
    secondList.add("second");

    Map<String, List<String>> myMap = new HashMap<>();
    myMap.put("one", firstList);
    myMap.put("two", secondList);

    int size = myMap.entrySet().stream()
                               .map(entry -> entry.getValue())
                               .flatMap(list -> list.stream())
                               .collect(Collectors.toList())
                               .size();
    System.out.println("Size of all elements in map is:" + size);
}
Run Code Online (Sandbox Code Playgroud)

Jir*_*ser 7

这至少更具可读性

int size = myMap.values().stream()
     .mapToInt(Collection::size)
     .sum();
Run Code Online (Sandbox Code Playgroud)

或者如果你想看起来像一个函数式编程大师,请使用:

int size2 = myMap.values().stream()
     .reduce(0, (acc, val) -> acc + val.size(), Integer::sum);
Run Code Online (Sandbox Code Playgroud)

编辑:使用.values() :]

  • 关闭,但为什么要麻烦Map.Entry对象呢?为什么不只是`myMap.values().stream().mapToInt(Collection :: size).sum()`? (2认同)