Java 8基于列表部分的条件筛选列表

Java 8基于列表部分的条件筛选列表,java,collections,java-8,java-stream,Java,Collections,Java 8,Java Stream,我有一个对象列表N,其中N是 N |--- type (1,2,3) |--- A (applicable if type 1) |--- B (applicable if type 2) |--- C (applicable if type 3) |--- List<Integer> p 之后,一旦L形成: if(type != 1) if(l contains any element from p): select this N 如何在一步中使用流实现这一点 我

我有一个对象列表N,其中N是

N
|--- type (1,2,3)
|--- A (applicable if type 1)
|--- B (applicable if type 2)
|--- C (applicable if type 3)
|--- List<Integer> p 
之后,一旦L形成:

if(type != 1)
  if(l contains any element from p):
    select this N
如何在一步中使用流实现这一点

我可以先筛选并创建一个列表“l”,然后使用该列表进行筛选

l = stream.filter(a -> a.type == 1 && a.A > some_value).collect(..)
然后,使用l进一步过滤

但是有更好更精确的方法吗

我不知道“选择这个N”在这里是什么意思,因为您选择的是
p
值,所以我忽略了这一行

Set<Integer> set = listOfN.stream()
    .filter(n -> n.type == 1 && n.A > some_value)
    .flatMap(n -> n.p.stream())
    .collect(Collectors.toSet());
List result=listOfN.stream()
.filter(n->n.type!=1&&n.p.stream().anyMatch(set::contains))
.collect(Collectors.toList());

谢谢,但这样做只能得到类型为的对象!=1,对吗?。我想要的是,如果类型为1,则检查n.A>某些值,如果类型为2或3。抱歉,如果问题中没有明确提到这一点。另外,是否可以将这两个步骤结合起来?@sakura您增强了第二块中的
过滤器,使其也包括类型1它可以在一个语句中完成,但这会严重影响性能!您的数据结构可能不适合需要执行的操作。此数据结构是来自第三方还是您自己的。最好你能解释一下你的意图。
l = stream.filter(a -> a.type == 1 && a.A > some_value).collect(..)
if(type == 1) && (A > some_value):
  Add all elements of p to l
  select this N
Set<Integer> set = listOfN.stream()
    .filter(n -> n.type == 1 && n.A > some_value)
    .flatMap(n -> n.p.stream())
    .collect(Collectors.toSet());
if(type != 1)
  if(l contains any element from p):
    select this N
List<N> result = listOfN.stream()
    .filter(n -> n.type != 1 && n.p.stream().anyMatch(set::contains))
    .collect(Collectors.toList());