为什么 Stream 没有 toList() 方法?

2022-09-01 03:59:54

使用Java 8流时,通常采用列表,从中创建流,开展业务并将其转换回来。像这样:

 Stream.of(-2,1,2,-5)
        .filter(n -> n > 0)
        .map(n -> n * n)
        .collect(Collectors.toList());

为什么“”部分没有快捷方式/方便的方法?在Stream接口上,有一种将结果转换为数组的方法叫做,为什么缺少?.collect(Collectors.toList())toArray()toList()

恕我直言,将结果转换为列表比转换为数组更常见。我可以忍受这一点,但称这种丑陋是相当烦人的。

有什么想法吗?


答案 1

最近,我写了一个名为StreamEx的小型库,它扩展了Java流,并在许多其他功能中提供了这种确切的方法:

StreamEx.of(-2,1,2,-5)
    .filter(n -> n > 0)
    .map(n -> n * n)
    .toList();

此外,toSet(),toCollection(Supplier),joining(),groupingBy()和其他快捷方式也在那里可用。


答案 2

Java 16 引入了 Stream.toList()

Stream.of(-2,1,2,-5)
    .filter(n -> n > 0)
    .map(n -> n * n)
    .toList();

新方法与现有方法略有不同:它返回一个不可修改的列表。collect(toList())