如何使用Java 8方法对List <List <>>结构中的每个元素应用一些更改

Igo*_*kov 3 java foreach list java-8 java-stream

我有一些像 List<List<Double>> listOfDoubles我需要将其转换为的结构List<List<Integer>> listOfInteger.我在不使用Java 8的情况下编写代码.它看起来像:

List<List<Integer>> integerList = new ArrayList<>();
for (int i = 0; i < doubleList.size(); i++) {
    for (Double doubleValue : doubleList.get(i)) {
        integerList.get(i).add(doubleValue.intValue());
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图替换第二for,foreach但不能因为i应该是最终的.如何使用Java 8方法编写此代码?

Mur*_*nik 5

您可以流式传输"外部"列表,生成一个Stream<List<Double>.然后,流式传输每个"内部"列表,将每个元素转换为a Integer并收集结果.然后只收集"外部"流.如果你把它们放在一起,你会得到这样的东西:

List<List<Integer>> integerList = 
    doubleList.stream()
              .map(l -> l.stream()
                         .map(Double::intValue)
                         .collect(Collectors.toList()))
              .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)