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