当前位置: 首页 > 面试题库 >

什么样的清单 收集器。清单()返回?

曹泉
2023-03-14
问题内容

我正在阅读Lambda的状态:图书馆版,并对以下声明感到惊讶:

Streams 部分下,有以下内容:

List<Shape> blue = shapes.stream()
                         .filter(s -> s.getColor() == BLUE)
                         .collect(Collectors.toList());

文件没有说明shapes实际的内容,我也不知道它是否重要。

让我感到困惑的是:List此代码块返回什么样的具体代码?

  • 它将变量分配给List<Shape>,这是完全可以的。
  • stream()也不filter()决定要使用哪种列表。
  • Collectors.toList()均未指定的具体类型List

那么,这里使用的是什么 具体 类型(子类)List?有保证吗?


问题答案:

那么,这里使用List的什么具体类型(子类)?有保证吗?

如果查看的文档Collectors#toList(),它会指出-
“无法保证返回的List的类型,可变性,可序列化性或线程安全性”
。如果要返回特定的实现,则可以Collectors#toCollection(Supplier)改用。

Supplier<List<Shape>> supplier = () -> new LinkedList<Shape>();

List<Shape> blue = shapes.stream()
            .filter(s -> s.getColor() == BLUE)
            .collect(Collectors.toCollection(supplier));

从lambda中,您可以返回所需的任何实现List<Shape>

更新

或者,您甚至可以使用方法参考:

List<Shape> blue = shapes.stream()
            .filter(s -> s.getColor() == BLUE)
            .collect(Collectors.toCollection(LinkedList::new));


 类似资料:
  • 问题内容: 我是Java的新手,我需要列出列表列表。我可以在python中做到这一点,因为列表的元素可以是列表,因此在嵌入式列表中将引用列表,并且将引用嵌入式列表的zeroeth元素。有什么简单的方法可以在Java中实现此行为? 问题答案: 所有其他答案在技术上都是正确的,但是恕我直言,如果您实施了粗略的列表列表,您将无法在正确的抽象级别上处理数据。例如,我很确定列表列表在您的业务领域中已经意味着

  • 问题内容: 运行代码 退货 因此,每次在列表列表中每次更新元组(列表)的第一个参数,但第二个参数list [0]却没有更新。有人可以解释这里发生的事情并提出解决方法吗?我想输出 问题答案: 列表是可变类型-为了创建副本(而不只是传递相同的列表),您需要明确地这样做: 但是,已经是Python内置的名称-最好不要将该名称用作变量。这是一个不用作变量名并复制的版本: 请注意,我演示了两种不同的方法来复

  • 问题内容: 关于 Java泛型, 我有一个非常基本的问题。我想这两个和是同质的。我是对的还是我缺少的基本观念? 问题答案: 泛型类型比较古怪。 表示Number或未知的子类。如果获得这样的值,它将是,但是由于您不知道哪个有效,因此无法给出此类型的值。 区别在于参数和返回值。 在一些地方用来表示类型可以是超级类型。例如 在集合中,此方法表示比较器需要能够比较相同类型或任何超级类型。 这意味着你可以

  • 问题内容: 如何合并列表列表? 进入 如果我可以在合并列表之前在每个项目的开头和结尾添加一个值(例如html标签),那就更好了。 即,最终结果将是: 问题答案: 要串联列表,可以使用 要添加HTML标签,您可以使用列表推导。

  • 问题内容: 有没有更简洁,有效或简单的pythonic方法来执行以下操作? 编辑: 我实际上发现这比使用operator.mul快一点: 给我 问题答案: 不使用lambda: 更好,更快。使用python 2.7.5 在以下配置中: python 2.7.5的结果 结果:如果用作数据结构,则速度最快(小型阵列为18x,大型阵列为250x) 使用python 3.3.2: python 3更慢吗?

  • 问题内容: 我有一个关于泛型的Java问题。我声明了一个通用列表: 然后以某种方法尝试实例化并将项目添加到该列表: 哪里只是类型的对象; 它不会编译。它说: List 不适用于参数(MyType) 任何想法? 问题答案: 您不能对extends进行“放置”。看一下泛型- 获取和放置规则 。