如何对列表中的每个元素应用一些更改<;列表<&燃气轮机&燃气轮机;结构使用Java8方法

如何对列表中的每个元素应用一些更改<;列表<&燃气轮机&燃气轮机;结构使用Java8方法,java,list,foreach,java-8,java-stream,Java,List,Foreach,Java 8,Java Stream,我有一些结构,比如listOfDoubles我需要将其转换为listOfInteger。我没有使用Java8编写代码。它看起来像: List<List<Integer>> integerList = new ArrayList<>(); for (int i = 0; i < doubleList.size(); i++) { for (Double doubleValue : doubleList.get(i)) { integ

我有一些结构,比如
listOfDoubles
我需要将其转换为
listOfInteger
。我没有使用Java8编写代码。它看起来像:

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());
    }
}
List integerList=new ArrayList();
对于(int i=0;i

我试图将
的第二个
替换为
foreach
,但做不到,因为
I
应该是最终的。如何使用Java 8方法编写此代码?

您可以对“外部”列表进行流式处理,在代码中生成一个
流,因为您缺少对内容的初始化。我会这样做

public List<List<Integer>> convert(List<List<Double>> doubles){
    List<List<Integer>> toReturn = new ArrayList<>();
    for(List<Double> ld: doubles){
        List<Integer> temp = new ArrayList<>();
        for(Double d: ld){
            temp.add(d.intValue());
        }
        toReturn.add(temp)
    }
    return toReturn;
}
公共列表转换(列表加倍){
List toReturn=new ArrayList();
对于(列表ld:双倍){
List temp=new ArrayList();
用于(双d:ld){
临时添加(d.intValue());
}
返回。添加(临时)
}
回归回归;
}
基本上,对于双列表列表中的每个列表(不是真正的矩阵,但您可以将其视为一个矩阵),您可以在整数列表中创建一个列表并转换单个内容


另外,这种方法更像Java 7,因为纯Java 8将使用另一个答案中建议的流。

我们可以通过以下方法摆脱样板代码
collect(Collectors.toList())

对我来说,上述代码的可读性和可维护性比使用JDK stream API的cod e要好得多:

List<List<Integer>> integerList = 
    doubleList.stream()
          .map(l -> l.stream()
                     .map(Double::intValue)
                     .collect(Collectors.toList()))
          .collect(Collectors.toList());
列表整数列表=
doubleList.stream()
.map(l->l.stream()
.map(Double::intValue)
.collect(收集器.toList())
.collect(Collectors.toList());

是的,你说得对。但它只是在这里起草代码。这不是真的,但是谢谢。
StreamEx.of(listOfDoubles)
        .map(e -> StreamEx.of(e).map(Double::intValue).toList())
        .toList();
List<List<Integer>> integerList = 
    doubleList.stream()
          .map(l -> l.stream()
                     .map(Double::intValue)
                     .collect(Collectors.toList()))
          .collect(Collectors.toList());