小编Nav*_*D C的帖子

如何在 Java8 Streams 中比较两个 Map 列表以识别具有多个过滤谓词的匹配和不匹配记录

要求是使用流使用多个匹配标准从映射列表中获取所有匹配和不匹配的记录。即,不需要使用单个过滤器来仅比较“电子邮件”,而是需要使用多个过滤器谓词来比较两个列表以匹配记录,以比较电子邮件和 Id 两者。

清单1:

[{"Email","naveen@domain.com", "Id": "A1"}, 
 {"Email":"test@domain.com","id":"A2"}]
Run Code Online (Sandbox Code Playgroud)

清单2:

[{"Email","naveen@domain.com", "Id": "A1"}, 
 {"Email":"test@domain.com","id":"A2"}, 
 {"Email":"test1@domain.com","id":"B1"}]
Run Code Online (Sandbox Code Playgroud)

使用流,我可以使用电子邮件上的单个过滤器谓词找到匹配和不匹配的记录:匹配记录:

[{"Email","naveen@domain.com", "Id": "A1"}, 
 {"Email":"test@domain.com","id":"A2"}]
Run Code Online (Sandbox Code Playgroud)

不匹配的记录:

[{"Email":"test1@domain.com","id":"B1"}]]
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以同时比较电子邮件和 ID,而不仅仅是电子邮件

dbRecords.parallelStream().filter(searchData ->
                inputRecords.parallelStream().anyMatch(inputMap ->
                    searchData.get("Email").equals(inputMap.get("Email")))).
                collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class ListFiltersToGetMatchingRecords {


    public static void main(String[] args) {

        long startTime = System.currentTimeMillis();
        List<Map<String, Object>> dbRecords = createDbRecords();
        List<Map<String, Object>> inputRecords = createInputRecords();

        List<Map<String,Object>> matchinRecords = dbRecords.parallelStream().filter(searchData ->
                inputRecords.parallelStream().anyMatch(inputMap ->
                    searchData.get("Email").equals(inputMap.get("Email")))).
                collect(Collectors.toList());

        List<Map<String,Object>> notMatchinRecords = inputRecords.parallelStream().filter(searchData ->
                dbRecords.parallelStream().noneMatch( inputMap -> …
Run Code Online (Sandbox Code Playgroud)

java java-8

3
推荐指数
1
解决办法
1万
查看次数

标签 统计

java ×1

java-8 ×1