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

Java8-省略繁琐的收集方法

张心水
2023-03-14
collection.stream().filter(p->p.isCorrect()).collect(Collectors.toList());

有没有java api可以让我跳过流直接操作集合(比如C#中的linq?):

collection.filter(p->p.isCorrect)

共有1个答案

颛孙飞
2023-03-14

是,使用集合#removeif(Predicate):

移除此集合中满足给定谓词的所有元素

请注意,它将更改给定的集合,而不是返回新的集合。但是您可以创建集合的副本并对其进行修改。还要注意,谓词需要被否定才能充当筛选器:

public static <E> Collection<E> getFilteredCollection(Collection<E> unfiltered,
                                                      Predicate<? super E> filter) {
    List<E> copyList = new ArrayList<>(unfiltered);

    // removeIf takes the negation of filter 
    copyList.removeIf(e -> { return !filter.test(e);});  

    return copyList;
}
public static <E> Collection<E> getFilteredCollection(Collection<E> unfiltered,
                                                      Predicate<? super E> filter) {
   return unfiltered.stream()
                    .filter(filter)
                    .collect(Collectors.toList());
}
 类似资料:
  • 省略 不推荐省略 0 值单位,原因如下: CSS 规范中可以省略单位只有 [<length-percentage>](https://drafts.csswg.org/css-values-3/#typedef-length-percentage),其他比如角度单位 deg 在 Chrome 中可以省略, 这是浏览器的 Bug。 注:可以省略的单位包括:%|em|ex|ch|rem|vw|vh|v

  • 你能详细说明下面的答案是什么意思吗? 您应该能够切换到Java8,而不必在类中实现新方法。

  • 问题内容: Java 8中有什么方法可以将一个元素分组而不收集它们?我希望结果再次出现。因为我必须处理大量数据甚至是无限流,所以我无法先收集数据并再次流处理结果。 所有需要分组的元素在第一流中都是连续的。因此,我喜欢使流评估保持懒惰。 问题答案: 无法使用标准Stream API做到这一点。通常,您无法执行此操作,因为将来总是有可能出现属于任何已创建组的新项目,因此,在处理所有输入之前,您无法将组

  • 在Java8中有什么方法可以在中分组元素而不收集它们吗?我希望结果再次成为。因为我必须处理大量的数据,甚至是无限的流,所以我不能首先收集数据,然后再次流化结果。 所有需要分组的元素在第一个流中是连续的。因此,我喜欢保持流评估懒惰。

  • 问题内容: 我正在运行一个创建并忘记大量对象的应用程序,长期存在的对象的数量确实增长缓慢,但是与寿命短的对象相比,这很少。这是具有高可用性要求的桌面应用程序,需要每天24小时开机。大多数工作是在单个线程上完成的,该线程将使用它可以使用的所有CPU。 过去,我们在繁重的负载下看到了以下内容:随着垃圾收集器收集的内存少于新分配的内存,使用的堆空间缓慢增加,使用的堆大小缓慢增长并最终接近指定的最大堆。届

  • 我有以下课程。 我希望能够按年龄分组,然后收集人名列表,而不是人名对象本身;所有这些都在一个漂亮的lamba表达式中。 为了简化所有这些,我链接了当前的解决方案,该解决方案存储按年龄分组的结果,然后迭代它以收集名称。 当前解决方案 不理想,为了学习,我想有一个更优雅、更高效的解决方案。