java - Java 8 过滤集合中特定列的值
问题描述
我有一个List<DataBean>
bean定义如下,
private int id;
private int activityId;
private String info;
private int answerCode;
private String otherData;
还有另一个带有不同 bean 的 List ,List<Answer>
其 bean 如下:
private int id;
private int code;
我需要找到列List<Answer>
中code
包含的所有答案List<DataBean>.answerCode
。
例子:
List<DataBean>
包含
id activityId info answerCode
1 1 .. 144
1 1 .. 153
1 2 .. 160
1 3 .. 177
List<Answer>
包含
id code
--------
1 160
2 161
因此,我的结果List<Answer>
只是一个: 1 160
.
解决方案
// List<DataBean> -> Set<Integer> (set of answer codes)
Set<Integer> set = beans.stream()
.map(DataBean::getAnswerCode)
.collect(Collectors.toSet());
// List<Answer> -> filtered List<Answer>
List<Answer> result = answers.stream()
.filter(a -> set.contains(a.getCode()))
.collect(Collectors.toList());
推荐阅读
- angularjs - 如何在单击 ng-repeat 内的按钮时将按钮更改为文本?
- c# - C# GroupByMany 到 List-of-Lists
- c++ - 程序被杀死时调用函数
- javascript - 在 catch 中默认处理 404 错误,为什么我不能将 throw 错误消息传递给 catch?
- cordova - ionic 3应用程序中的应用程序销毁时如何调用函数
- javascript - 重定向到需要身份验证的页面
- python - python:对齐查询结果
- regex - 匹配时间戳的正则表达式
- pandas - Python pandas_udf火花错误
- reactjs - 应用栏中的菜单图标