小编sna*_*ran的帖子

Collectors.toList 和 Stream.toList 模板参数区别

发现collect(Collectors.toList())和Stream.toList()之间的区别。看

class Animal { }
class Cat extends Animal { }
record House(Cat cat) { }

class Stuff {
    public static void function() {
        List<House> houses = new ArrayList<>();
        List<Animal> animals1 = 
            houses.stream()
                  .map(House::cat)
                  .collect(Collectors.toList()); // ok
        List<Animal> animals2 =
            houses.stream()
                  .map(House::cat).toList(); // compile error
        List<Animal> animals3 =
            houses.stream()
                  .map(House::cat)
                  .map(cat -> (Animal) cat).toList(); // ok
    }
}
Run Code Online (Sandbox Code Playgroud)

collect(Collectors.toList()) 能够给我一个动物列表或猫列表。但是Stream.toList()只能给出Cat的List。

问题是有什么方法可以让 Stream.toList() 工作。在我的现实世界示例中,我有一个类覆盖 shutdownNow,它返回 Runnable 列表,因此我的类调用了 some.stream().collect(Collectors.toList()),但是 some.stream().toList()返回 MyRunnable 的列表。

我的一部分希望他们将函数声明为而default <U super T> List<U> toList()不是default List<T> …

java java-16

1
推荐指数
1
解决办法
766
查看次数

标签 统计

java ×1

java-16 ×1