首页 > 解决方案 > 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.

标签: java

解决方案


// 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());

推荐阅读