假設我希望從 lambda 函式中收集一個 doubles[] 串列,我創建了以下示例,但是它不會在給定型別的情況下編譯。我能做些什么作為解決方法?
public class CollectingStreams {
public static double [] methodReturnArray(int n){
return new double[] {1*n,2*n};
}
public static void main(String[] args){
List<double[]> listArray= IntStream.range(0,5).parallel().forEach(
(n) -> {methodReturnArray(n).collect(Collectors.toList());
});
}
}
這是編譯錯誤:
java: cannot find symbol
symbol: method collect(java.util.stream.Collector<java.lang.Object,capture#1 of ?,java.util.List<java.lang.Object>>)
location: class double[]
作為嘗試,我嘗試了以下方法
List<double[]> listArray= IntStream.range(0,5).parallel().forEach(
(n) -> {
Arrays.stream(methodReturnArray(n)).collect(Collectors.toList());
});
但是它會提示此編譯錯誤:
java: method collect in interface java.util.stream.DoubleStream cannot be applied to given types;
required: java.util.function.Supplier<R>,java.util.function.ObjDoubleConsumer<R>,java.util.function.BiConsumer<R,R>
found: java.util.stream.Collector<java.lang.Object,capture#1 of ?,java.util.List<java.lang.Object>>
reason: cannot infer type-variable(s) R
(actual and formal argument lists differ in length)
此外,我已經看到(here)[https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html] 最好避免使用有利于收集的陣列到串列,因此我必須小心使用陣列。
我不確定如何正確轉換或修改我的嘗試,以便我可以收集我的 double[] 串列。
有什么想法嗎?
謝謝
uj5u.com熱心網友回復:
而不是.forEach()use .mapToObject(),因為 forEach 不會回傳任何可以進一步處理的東西。
這是我會嘗試的代碼:
List<double[]> listArray = IntStream.range(0,5)
.mapToObj(CollectingStreams::methodReturnArray)
.collect(Collectors.toList());
uj5u.com熱心網友回復:
List<int> numbers = new ArrayList<>();
List<double> numbers.stream().map(number -> (double) number).toList();
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/433414.html
