Java 8从集合中的特定列筛选值
我有一个Java 8从集合中的特定列筛选值,java,Java,我有一个列表,其中bean的定义如下: private int id; private int activityId; private String info; private int answerCode; private String otherData; 还有另一个具有不同bean的列表,List,该bean如下所示: private int id; private int code; 我需要在List中找到所有答案,其code列包含在List.answerCode中 示例
列表
,其中bean的定义如下:
private int id;
private int activityId;
private String info;
private int answerCode;
private String otherData;
还有另一个具有不同bean的列表,List
,该bean如下所示:
private int id;
private int code;
我需要在List
中找到所有答案,其code
列包含在List.answerCode
中
示例:
列表
包含
id activityId info answerCode
1 1 .. 144
1 1 .. 153
1 2 .. 160
1 3 .. 177
id code
--------
1 160
2 161
列表
包含
id activityId info answerCode
1 1 .. 144
1 1 .. 153
1 2 .. 160
1 3 .. 177
id code
--------
1 160
2 161
因此,我从List
得到的结果只有一个:1160
//List->Set(应答码集)
// 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());
Set=beans.stream()
.map(数据域::getAnswerCode)
.collect(收集器.toSet());
//列表->过滤列表
列表结果=答案。流()
.filter(a->set.contains(a.getCode()))
.collect(Collectors.toList());
我会这样做:
List<Answer> userAnswers = answers.stream()
.filter(answer -> users.stream().anyMatch(user ->
user.answerCode==answer.code))
.collect(Collectors.toList());
List userAnswers=answers.stream()
.filter(答案->用户.stream().anyMatch(用户->
user.answerCode==answer.code))
.collect(Collectors.toList());
希望有帮助!:) 你试过写一些代码来做这件事吗?
answers.stream().filter(a->data.stream().anyMatch(d->d.code==a.answerCode)).collect(Collectors.toList())
@shmosel:你的解决方案很好而且紧凑,但是效率很低,因为它的运行时间是O(n^2)。@Robert你的意思是O(n*m).可以工作,但对于大型数据集来说速度非常慢,因为它的运行时是O(n^2)