Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 8从集合中的特定列筛选值_Java - Fatal编程技术网

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)