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

java-8过滤列表而不创建新列表

雍马鲁
2023-03-14

我正在寻找在Java-8中过滤列表的最干净的方法,用一个简单的lambda 谓词,而不用创建一个新的列表。

特别是,这种解决方案不合适,因为toList()返回一个新的List

List<Person> beerDrinkers = persons.stream()
    .filter(p -> p.getAge() > 16)
    .collect(Collectors.toList());

注意,下面的解决方案也不起作用,因为列表应该< code>clear()其原始值(但是很明显,如果您在过滤之前清除它,就没有什么可过滤的了...):

persons.stream()
    .filter(p -> p.getAge() > 16)
    .forEach((p) -> persons.add(p));

(此外,我更喜欢不使用第三方库或框架的解决方案)

共有1个答案

柯瀚海
2023-03-14
beerDrinkers.removeIf(p -> p.getAge() <= 16);
 类似资料:
  • 问题内容: 我有两个列表,我要过滤两个列表都包含的thoose元素。我想用lambda表达式做到这一点。 用户getName和客户端getUserName都返回String。 这是我的示例代码: 问题答案: 但这效率很低,因为它是O(m * n)。您最好创建一组可接受的名称: 还要注意,它并不严格等同于您拥有的代码(如果已编译),如果有多个用户具有与该客户端相同的名称,则该客户端会将同一客户端两次

  • 我有一个地图数据结构列表。我需要通过在每个映射中搜索一个值来过滤列表(结果总是只有一个映射)。下面的代码显示了我的两种实现方法。虽然我的Lambda方法很管用,但在我看来似乎有些臃肿。我觉得这里缺少了一些简单的东西,有一个更简洁的Lambda可以代替这个。我很感激任何能让Lambda变得更好的建议。多谢了。

  • 我有一个物体,如下所示 给定MyObject的列表,是否可以使用Java8个流来过滤类型和子类型? 目前为止我有 但在这一部分中,我还希望在每个子类型上使用另一个过滤器来过滤特定子类型上的过滤器。我想不出怎么做。 例如 我会传入匹配类型B和子类型Z,所以我希望得到一个结果- 以下当前返回列表中的2个项目。 但是我想在每个子类型上添加一个额外的过滤器,并且只匹配“Z”存在的地方。

  • 问题内容: 我正在使用此代码将转换为: 我想避免在循环的每次迭代中创建一个新列表。那可能吗? 问题答案: 您可以使用List.addAll()方法。它接受Collection作为参数,而您的集合就是Collection。 编辑: 作为对问题的编辑的回应。 很容易看出,如果要使用带有s作为值,则要具有k个不同的值,则需要创建k个不同的列表。 因此:您完全无法避免创建这些列表,必须创建列表。 可能的解

  • 我有一个像这样的xsd- 当我使用XJC生成类绑定时,我看到教师是List类型的 如何生成字符串列表而不是对象?任何帮助都很感激。 更新:使用“vamsilp”提供的解决方案——在删除“教师”元素上的“minOccurs”后,它工作得很好!XSD是由泽西从以下代码自动生成的: 我不知道如何删除“minOccurs”属性。我是否需要修改代码以忽略它?

  • 我阅读了这个问题的答案:Java 8在使用流“过滤器”和“收集”后会创建一个新的列表吗? 但这不太符合我的经验...我想。我只是想确保我清楚情况。 考虑以下代码(可以在https://www . tutorialspoint . com/compile _ Java _ online . PHP上运行): 我期望的结果如下: 但我得到的实际结果是: 由于某种原因,当我在< code > hasti