亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何從內聯<填充列表<>?

如何從內聯<填充列表<>?

慕田峪9158850 2022-09-28 15:58:22
我想用隨機整數的元素填充List,范圍為0到。為什么方法有效,無效?numberOfElementsnumberOfElements/10populateListStream1()populateListStream2()public static List<Integer> populateListStream1(int numberOfElements) {    return Stream.generate(new Random()::nextDouble)            .limit(numberOfElements)            .map(e -> (int)(e*numberOfElements/10))            .collect(Collectors.toList());}public static List<Integer> populateListStream2(int numberOfElements) {    return IntStream.range(0,numberOfElements)            .map(e -> random.nextInt(numberOfElements/10))            .collect(Collectors.toList());}
查看完整描述

3 回答

?
MYYA

TA貢獻1868條經驗 獲得超4個贊

在第二個示例中,該類中的 nextInt() 返回一個基元,該基元無法收集到 .添加一個調用,這會將 的 轉換為它們的包裝類:RandomintListboxedintInteger

public static List<Integer> populateListStream2(int numberOfElements){    return IntStream.range(0,numberOfElements)
                    .map(e -> random.nextInt(numberOfElements/10))
                    .boxed()
                    .collect(Collectors.toList());
}

但是第一個也通過鑄造返回了原始的int!

是的,但它是在 中,所以它被自動裝箱到.您可以通過運行以下操作來判斷:StreamInteger

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

后者是.的好處之一是避免自動裝箱和拆箱。除非您顯式調用,否則它不會框IntStreamIntStreamboxed()


另請注意,Random 類中的一些方法已經返回隨機數,如 ints() 和 doubles()


查看完整回答
反對 回復 2022-09-28
?
慕絲7291255

TA貢獻1859條經驗 獲得超6個贊

第二個不起作用,因為您使用的是包含基元 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());
}

在這種情況下,值將像在方法中一樣自動裝箱。populateListStream2()

或者,我建議使用隨機.ints() 來生成一個整數流。


查看完整回答
反對 回復 2022-09-28
?
料青山看我應如是

TA貢獻1772條經驗 獲得超8個贊

將其裝入包裝器對應的類 。另外,您可以嘗試如下操作:intInteger


  public static List<Integer> populateListStream3(int numberOfElements) {

        List<Integer> listOfIntegers = new Random().ints(numberOfElements, 0, numberOfElements/10).boxed().collect(Collectors.toList());

        return listOfIntegers;

    }


查看完整回答
反對 回復 2022-09-28
  • 3 回答
  • 0 關注
  • 114 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號