首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >基于列表部分的条件的Java 8过滤器列表

基于列表部分的条件的Java 8过滤器列表
EN

Stack Overflow用户
提问于 2019-05-30 07:33:22
回答 1查看 2K关注 0票数 2

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

代码语言:javascript
复制
N
|--- type (1,2,3)
|--- A (applicable if type 1)
|--- B (applicable if type 2)
|--- C (applicable if type 3)
|--- List<Integer> p 

现在,我想要的结果是列表的过滤版本,如下所示:

代码语言:javascript
复制
create a list List<Integer> l

首先执行此操作:

代码语言:javascript
复制
if(type == 1) && (A > some_value):
  Add all elements of p to l
  select this N

稍后,一旦形成L:

代码语言:javascript
复制
if(type != 1)
  if(l contains any element from p):
    select this N

如何在一个步骤中使用streams实现这一点?

我可以先过滤并创建一个列表"l“,然后使用该列表进行过滤。

代码语言:javascript
复制
l = stream.filter(a -> a.type == 1 && a.A > some_value).collect(..)

然后,使用l进一步过滤。

但是有没有更好更精确的方法呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-30 07:49:54

if(键入== 1) && (A > some_value):将p的所有元素添加到l中选择这个N

我不知道"select this N“在这里是什么意思,因为您选择的是p值,所以我忽略了该行。

代码语言:javascript
复制
Set<Integer> set = listOfN.stream()
    .filter(n -> n.type == 1 && n.A > some_value)
    .flatMap(n -> n.p.stream())
    .collect(Collectors.toSet());

为了更好地执行下一步(contains()),结果是从List更改为Set

if(类型!= 1) if(l包含p中的任何元素):选择此N

代码语言:javascript
复制
List<N> result = listOfN.stream()
    .filter(n -> n.type != 1 && n.p.stream().anyMatch(set::contains))
    .collect(Collectors.toList());
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56369807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档