簡體   English   中英

Java Stream Collectors.toList()不會編譯

[英]Java Stream Collectors.toList() wont compile

任何人都可以解釋為什么下面的代碼不能編譯但第二個代碼呢?

不要編譯

private void doNotCompile() {

    List<Integer> out;
    out = IntStream
            .range(1, 10)
            .filter(e -> e % 2 == 0)
            .map(e -> Integer.valueOf(2 * e))
            .collect(Collectors.toList());

    System.out.println(out);
}

收集行上的編譯錯誤

  • IntStream類型中的方法collect(Supplier,ObjIntConsumer,BiConsumer)不適用於參數(Collector>)
  • 類型不匹配:無法從收集器>轉換為供應商

編譯

private void compiles() {
    List<Integer> in;

    in = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
    List<Integer> out;
    out = in.stream()
            .filter(e -> e % 2 == 0)
            .map(e -> 2 * e)
            .collect(Collectors.toList());

    System.out.println(out);
}

IntStream沒有接受Collectorcollect方法。 如果需要List<Integer> ,則必須將IntStreamStream<Integer>

out = IntStream
        .range(1, 10)
        .filter(e -> e % 2 == 0)
        .map(e -> 2 * e)
        .boxed()
        .collect(Collectors.toList());

.map().boxed()的替代方法是mapToObj()

out = IntStream
        .range(1, 10)
        .filter(e -> e % 2 == 0)
        .mapToObj(e -> 2 * e)
        .collect(Collectors.toList ());

或者您可以使用IntStream collect方法:

out = IntStream
        .range(1, 10)
        .filter(e -> e % 2 == 0)
        .map(e -> 2 * e)
        .collect(ArrayList<Integer>::new, ArrayList::add, ArrayList::addAll);

IntStreamcollect方法在不可編譯的情況下是不同的。

public <R> R collect(Supplier<R> supplier, ObjIntConsumer<R> accumulator, BiConsumer<R,R> combiner)

因此,它不接受您提供的參數來collect

你可以通過將List<Integer>轉換為IntStream來解決這個IntStream

在第一個示例中,您正在對原始整數流進行操作。 原始整數不能進入List主要是因為Java中的泛型不太理想 Java語言設計師正在努力解決這個問題

在此期間,要解決此問題,您需要首先將這些原始int 打包Integer包裝器中 請參閱Eran的代碼示例答案

在第二個例子中,你已經迭代了Integer所以It Just Works ™。


當我在mapper中執行Integer.valueOf時,我以為我正在將這些int裝入Integers

IntStreammap函數采用IntUnaryOperator ,它是一個函數接口,它接受一個原始int並返回一個原語int。

valueOf獲得的Integer是未裝箱的,以匹配功能界面。

如何轉換 ArrayList<string> 至 ArrayList<object> using.collect(Collectors.toList() 在 Java stream<div id="text_translate"><p> 如何在 Java stream 中使用.collect(Collectors.toList()將ArrayList&lt;String&gt;轉換為ArrayList&lt;Object&gt;</p><p> 之前我用過</p><pre>CommonList = detailUtils.SelectIDValueGetterObservable(getActivity()).stream().forEach(i -&gt; CommonList.add(new foo(i));`</pre><p> 但是我遇到了這些<strong>副作用</strong></p><p> <a href="https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html" rel="nofollow noreferrer">https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html</a></p><p> 這建議.collect(Collectors.toList()</p><p> 我們該怎么做</p></div></object></string>

[英]How can I convert ArrayList<String> to ArrayList<Object> using .collect(Collectors.toList() in Java stream

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 java中Stream Collectors.toList()中的不兼容類型 Java Stream:如何避免在 Collectors.toList() 中添加 null 值? 如何在Java 8流API中延遲初始化Collectors.toList()? Collectors.toList()中的差異LongStream VS流 Java 16的Stream.toList()和Stream.collect(Collectors.toList()的區別? .collect(Collectors.toList())和Java方法上的Streams Stream.toList() 會比 Collectors.toList() 表現更好嗎 Java 8 流:myList.stream().map(Foo::bar).collect(Collectors.toList()) 的簡寫 如何轉換 ArrayList<string> 至 ArrayList<object> using.collect(Collectors.toList() 在 Java stream<div id="text_translate"><p> 如何在 Java stream 中使用.collect(Collectors.toList()將ArrayList&lt;String&gt;轉換為ArrayList&lt;Object&gt;</p><p> 之前我用過</p><pre>CommonList = detailUtils.SelectIDValueGetterObservable(getActivity()).stream().forEach(i -&gt; CommonList.add(new foo(i));`</pre><p> 但是我遇到了這些<strong>副作用</strong></p><p> <a href="https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html" rel="nofollow noreferrer">https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html</a></p><p> 這建議.collect(Collectors.toList()</p><p> 我們該怎么做</p></div></object></string> 如何在Kotlin中的Java 8 Stream上調用collect(Collectors.toList())?
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM