当前位置: 首页 > 知识库问答 >
问题:

要流式传输到新集合的集合

苏鸿志
2023-03-14

我正在寻找最无痛的方式来过滤收藏。我在想

Collection<?> foo = existingCollection.stream().filter( ... ). ...

但我不确定从过滤器到返回或填充另一个集合的最佳方式。大多数例子看起来像是“在这里你可以打印”。可能我缺少一个构造函数或输出方法。

共有3个答案

仲柏
2023-03-14

作为一个更符合Java8风格的函数式编程的例子:

Collection<String> a = Collections.emptyList();
List<String> result = a.stream().
     filter(s -> s.length() > 0).
     collect(Collectors.toList());
孙化
2023-03-14

来自java的示例。util。流的文档:

List<String>results =
     stream.filter(s -> pattern.matcher(s).matches())
           .collect(Collectors.toList());

收集器有一个toCollection()方法,我建议这样看。

宋昕
2023-03-14

大多数示例都避免将结果存储到集合中,这是有原因的。这不是推荐的编程方式。您已经有了一个集合,提供源数据和集合的集合本身没有任何用处。您希望对其执行某些操作,因此理想情况是使用流执行操作,并跳过将数据存储在中间集合中。这是大多数例子试图提出的。

当然,有很多现有的API与集合一起工作,并且总是会有的。因此,流API提供了不同的方法来处理对集合的需求。

>

  • 获取包含所有元素的不可修改的列表实现(JDK

    List<T> results = l.stream().filter(…).toList();
    

    获取一个任意的List实现,保存结果:

    List<T> results = l.stream().filter(…).collect(Collectors.toList());
    

    获取一个不可修改的List禁止null,如List.of(...)(JDK

    List<T> results = l.stream().filter(…).collect(Collectors.toUnmodifiableList());
    

    获取包含结果的任意集合实现:

    Set<T> results = l.stream().filter(…).collect(Collectors.toSet());
    

    获取特定的集合

    ArrayList<T> results =
      l.stream().filter(…).collect(Collectors.toCollection(ArrayList::new));
    

    添加到现有的集合

    l.stream().filter(…).forEach(existing::add);
    

    创建数组:

    String[] array=l.stream().filter(…).toArray(String[]::new);
    

    使用数组创建具有特定行为(可变、固定大小)的列表:

    List<String> al=Arrays.asList(l.stream().filter(…).toArray(String[]::new));
    

    允许具有并行功能的流添加到临时本地列表中,然后将其加入:

    List<T> results
      = l.stream().filter(…).collect(ArrayList::new, List::add, List::addAll);
    

    (注意:这与collector.toList()当前的实现方式密切相关,但这是一个实现细节,即不能保证toList()收集器的未来实现仍然会返回ArrayList

  •  类似资料:
    • 问题内容: 我正在开发一个使用大型MySQL表的spring应用程序。加载大表时,我得到一个,因为驱动程序试图将整个表加载到应用程序内存中。 我尝试使用 但是然后我打开的每个ResultSet都挂了; 在网上查看时,我发现发生这种情况是因为它尝试在关闭ResultSet之前尝试加载所有未读的行,但事实并非如此,因为我这样做是: 小表(3行)也会发生挂起,如果我不关闭RecordSet(在一种方法中

    • 我正在尝试为firestore中的社交媒体应用程序组织数据。为帖子创建一个新集合或将其放入用户的子集合更好吗? 深度应该是一样的,但是一种方式比另一种方式有什么优势吗? 创建新集合: 职位(集合) 用户(集合) 用户中的子集合: 用户(集合)

    • 我目前正在尝试轻松地将消息从一个Kafka集群上的主题流式传输到另一个集群(远程)- 所以假设WordCount演示在另一台PC上的一个Kafka-Instance上,而不是我自己的PC上。我也有一个Kafka-Instance在我的本地机器上运行。 现在我想让WordCount演示在包含应该计算单词的句子的Topic(“远程”)上运行。 然而,计数应该写入我本地系统上的Topic而不是“远程”T

    • 问题内容: 我一直遇到这个问题: 我想让hibernate管理一个表示集合集合的表。例如: 地图地图 套装清单 清单地图 例如,我希望能够代表这一点: 作为一个表: 没有自定义的hibernate代码似乎是不可能的,我不介意。但是我希望有人对自定义代码的外观有所指导。 我应该扩展AbstractPersistentCollection吗? CompositeUserType? 可以管理多个表是否正

    • 在上一个小节中我们学习了混合函数相关的语法特性,或者说是具有返回值的函数。 在 Less 中,我们可以把一个规则集当作一个 mixins 来使用,但是要注意区别两者之间的不同之处。 1. 什么是规则集? Allow wrapping of a css block, defined in a mixin 。——官方定义 慕课解释:把一个值为规则集的变量作为 Mixins 使用。 2. 语法详情 变量

    • 我正在制作一些lambda来从dynamoDB表中获取数据。 DynamoDB表具有 复合主键 'setId'作为分区键(范围键)(我用这个词'set'作为名词,就像'group'一样) 'id'作为排序键(散列键) 如果我理解正确, 我可以使用setId来查询,因为DynamoDb通过分区键进行集合。 所以我尝试了这个参数。 但它返回错误 Q. 获取集合是否需要排序键? 提前谢谢! 仅供参考)我