【问题标题】:Filtering the list in the list [closed]过滤列表中的列表[关闭]
【发布时间】:2020-04-17 09:14:25
【问题描述】:

我有一个对象 A 的列表,其中每个对象 A 都包含一个其他对象 B 的列表。 如何过滤对象 B 的列表并返回对象 A 的列表?

class A {
    private String group;
    private List<B> b;
}

class B {
    private String name;
}

我知道如何使用一个列表过滤:

listB
.stream()
.filter(b -> "123".equals(b.getName)))
.collect(toList());

但是如何为每个对象 A 过滤列表 B? 在输出中,我想在修改(过滤)后获得对象 A 的新列表。 我不想更改原始列表。

【问题讨论】:

  • 这个How to filter list of objects B and return list of objects A?是什么意思
  • @RavindraRanwala 我有一个对象 A 的列表。我想在每个对象 A 中过滤一个对象 B 的列表。然后我想在修改后获得一个新的对象 A 列表。

标签: java regex java-8 stream java-stream


【解决方案1】:

你可以使用forEach

listA.forEach(a -> {
    a.setB(a.getB().stream()
        .filter(b -> "123".equals(b.getName)))
        .collect(toList());
});

@Naman 建议更简洁优雅的方式:

listA.forEach(a -> a.getB().removeIf(b -> !"123".equals(b.getName)));

【讨论】:

  • a.setB(a.getB()... 可以替换为a.b.removeIf
  • @Naman 你的意思是内流,对吧?
  • 是的,这就是对象主要发生变异的地方
  • @Naman 我让自己将其添加到我的答案中,谢谢!
  • 你不需要在使用removeIf改变底层集合本身时进行设置
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-28
  • 2013-08-02
  • 1970-01-01
  • 2013-02-12
  • 2021-06-18
  • 2016-08-05
相关资源
最近更新 更多