簡體   English   中英

如何將 Java 8 IntStream 轉換為列表?

[英]How do I convert a Java 8 IntStream to a List?

我正在查看IntStream的文檔,我看到了一個toArray方法,但無法直接轉到List<Integer>

當然有一種方法可以將Stream轉換為List嗎?

IntStream::boxed

IntStream::boxedIntStream轉換為Stream<Integer> ,然后您可以將其collectList

theIntStream.boxed().collect(Collectors.toList())

boxed方法將IntStreamint原始值轉換為Integer對象流。 “裝箱”一詞將intInteger轉換過程命名為。 請參閱Oracle 教程

Java 16 及更高版本

Java 16 帶來了更短的toList方法。 產生一個不可修改的列表 在這里討論。

theIntStream.boxed().toList() 

您還可以在 Stream 上使用 mapToObj(),它接受一個 IntFunction 並返回一個對象值 Stream,該對象值 Stream 由將給定函數應用於此流的元素的結果組成。

List<Integer> intList = myIntStream.mapToObj(i->i).collect(Collectors.toList());

您可以使用Eclipse Collections 中提供的原始集合並避免裝箱。

MutableIntList list = 
    IntStream.range(1, 5)
    .collect(IntArrayList::new, MutableIntList::add, MutableIntList::addAll);

注意:我是 Eclipse Collections 的貢獻者。

您可以使用 collect 方法:

IntStream.of(1, 2, 3).collect(ArrayList::new, List::add, List::addAll);

事實上,當你在對象流上調用 .collect(Collectors.toList()) 時,這幾乎就是 Java 所做的:

public static <T> Collector<T, ?, List<T>> toList() {
    return new Collectors.CollectorImpl(ArrayList::new, List::add, (var0, var1) -> {
        var0.addAll(var1);
        return var0;
    }, CH_ID);
}

注意:第三個參數只有在運行並行收集時才需要; 對於順序收集,僅提供前兩個就足夠了。

查找以下使用 Java 8 查找每個 int 元素的平方的示例:-

IntStream ints = Arrays.stream(new int[] {1,2,3,4,5});       
List<Integer> intsList = ints.map(x-> x*x)
          .collect(ArrayList<Integer>::new, ArrayList::add, ArrayList::addAll);

暫無
暫無

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM