3 回答

TA貢獻(xiàn)1868條經(jīng)驗(yàn) 獲得超4個(gè)贊
在第二個(gè)示例中,該類中的 nextInt()
返回一個(gè)基元,該基元無法收集到 .添加一個(gè)調(diào)用,這會(huì)將 的 轉(zhuǎn)換為它們的包裝類:Random
int
List
boxed
int
Integer
public static List<Integer> populateListStream2(int numberOfElements){ return IntStream.range(0,numberOfElements) .map(e -> random.nextInt(numberOfElements/10)) .boxed() .collect(Collectors.toList()); }
但是第一個(gè)也通過鑄造返回了原始的int!
是的,但它是在 中,所以它被自動(dòng)裝箱到.您可以通過運(yùn)行以下操作來判斷:Stream
Integer
Stream.generate(new Random()::nextDouble) .limit(numberOfElements) .map(e -> (int)(e*numberOfElements/10)) .peek(e -> System.out.println(e.getClass())) .collect(Collectors.toList());
哪些打?。?/p>
class java.lang.Integer
后者是.的好處之一是避免自動(dòng)裝箱和拆箱。除非您顯式調(diào)用,否則它不會(huì)框IntStream
IntStream
boxed()
另請(qǐng)注意,Random
類中的一些方法已經(jīng)返回隨機(jī)數(shù)流
,如 ints()
和 doubles()

TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊
第二個(gè)不起作用,因?yàn)槟褂玫氖前?int 類型的 IntStream
。您必須在 之前致電盒裝()
。但更好的解決方案是使用 mapToObj()
而不是:map()
map()
public static List<Integer> populateListStream2(int numberOfElements) { return IntStream.range(0, numberOfElements) .mapToObj(e -> random.nextInt(numberOfElements / 10)) .collect(Collectors.toList()); }
在這種情況下,值將像在方法中一樣自動(dòng)裝箱。populateListStream2()
或者,我建議使用隨機(jī).ints()
來生成一個(gè)整數(shù)流。

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超8個(gè)贊
將其裝入包裝器對(duì)應(yīng)的類 。另外,您可以嘗試如下操作:intInteger
public static List<Integer> populateListStream3(int numberOfElements) {
List<Integer> listOfIntegers = new Random().ints(numberOfElements, 0, numberOfElements/10).boxed().collect(Collectors.toList());
return listOfIntegers;
}
添加回答
舉報(bào)