Java 8 - 在地图值中过滤列表

vin*_*ukl 6 java iterator java-8 java-stream collectors

我正在编写一个方法,它接受在这里定义a Map的形式的输入.Map<Term, List<Integer>>Term

方法:

  1. 翻过它的键Map并使用Term属性过滤它们.
  2. 对于每个剩余的键,获取相应列表的大小,将其限制为5(min(List.size(), 5))并将输出添加到全局变量(例如totalSum)
  3. 返回 totalSum

这是我到目前为止所写的:

 inputMap
    .entrySet()
    .stream()
    .filter(entry -> entry.getKey().field().equals(fieldName))    // Keep only terms with fieldName
    .forEach(entry -> entry.getValue()
        .map(size -> Math.min(entry.getValue().size(), 5)))   // These 2 lines do not work
        .sum();
Run Code Online (Sandbox Code Playgroud)

我无法将列表流作为输入,为每个列表输出一个整数并返回所有输出的总和.

我显然可以使用for循环来编写它,但我正在尝试学习Java 8,并且好奇如果使用它可以解决这个问题.

Era*_*ran 11

你不需要这个forEach方法.你可以将map每个条目转换Map为an int,以及sum那些整数:

int sum = inputMap
    .entrySet()
    .stream()
    .filter(entry -> entry.getKey().field().equals(fieldName))
    .mapToInt(entry -> Math.min(entry.getValue().size(), 5))
    .sum();
Run Code Online (Sandbox Code Playgroud)