如何对列表中的每个元素应用一些更改<;列表<&燃气轮机&燃气轮机;结构使用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());