我有两个 String
对象列表。第一个列表可以有一个可以根据某些分隔符分割的对象。我想获取第一个列表中第二个列表中不存在的所有记录。
List<String> list = Arrays.asList("A;H","B","C","D");
List collection = Arrays.asList("AH","B","D","E","F");
List<String> result = list.stream().filter(str -> !collection.contains(str)).collect(Collectors.toList());
根据我的要求,上面的代码部分正确。它输出[A;H,C]。我的要求是它应该只给出 C 的输出。因为如果“A;H”的任何字符或 String
对象出现在第二个列表中。不应收集它。
最佳答案
您可以使用正则表达式消除分隔字符,然后比较值是否存在。这是它的样子。
private static final Pattern DELIMITER = Pattern.compile("\\W");
Set<String> set = new HashSet<>(collection);
List<String> nonExistingValues = list.stream()
.map(s -> DELIMITER.splitAsStream(s).collect(Collectors.joining()))
.filter(s -> !set.contains(s))
.collect(Collectors.toList());
重用下面评论中提到的模式的更紧凑的方法是,
List<String> nonExistingValues = list.stream()
.map(s -> DELIMITER.matcher(s).replaceAll(""))
.filter(s -> !set.contains(s))
.collect(Collectors.toList());
关于java - 检查第二个列表中是否缺少第一个列表的任何条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57706517/