java 计算两个List<String> 共同差集 不要用contaions来进行比较
时间: 2024-03-17 22:39:38 浏览: 61
如果不想使用`contains`方法,可以使用Java8的Stream API中的`anyMatch`方法来实现。代码如下:
```java
List<String> list1 = Arrays.asList("a", "b", "c");
List<String> list2 = Arrays.asList("b", "c", "d");
List<String> diff = list1.stream()
.filter(str -> list2.stream().noneMatch(str2 -> str.equals(str2)))
.collect(Collectors.toList());
diff.addAll(list2.stream()
.filter(str -> list1.stream().noneMatch(str2 -> str.equals(str2)))
.collect(Collectors.toList()));
System.out.println(diff); // 输出 [a, d]
```
上面的代码中,使用`noneMatch`方法来判断两个List中是否存在相同的元素。如果`noneMatch`方法返回`true`,说明两个List中没有相同的元素,这样就可以将该元素添加到共同差集中。
相关问题
比较两个 List<String> 差集
要比较两个 `List<String>` 的差集,即找到在一个列表中存在而在另一个列表中不存在的元素,你可以使用`removeAll()`方法。这个方法会从一个列表中移除另一个列表中存在的所有元素。以下是一个示例代码:
```java
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> list1 = new ArrayList<>();
list1.add("apple");
list1.add("banana");
list1.add("orange");
List<String> list2 = new ArrayList<>();
list2.add("banana");
list2.add("orange");
list1.removeAll(list2);
System.out.println("列表1中差集元素: " + list1);
}
}
```
在上面的示例中,`list1`和`list2`是两个 `List<String>` 对象。通过调用`list1.removeAll(list2)`方法,将在`list2`中存在的所有元素从`list1`中移除,这样就得到了列表1中的差集。最终输出的结果将会是`[apple]`,表示在列表1中存在而在列表2中不存在的元素是"apple"。
请注意,这个方法会修改原始列表(即在列表1上进行操作),如果你不想修改原始列表,你可以先创建一个副本进行操作。例如:
```java
List<String> list1Copy = new ArrayList<>(list1);
list1Copy.removeAll(list2);
```
这样,`list1Copy`将会是列表1与列表2的差集,而列表1本身不会被修改。
俩个Lists<String> 取差集
可以使用Java 8的Stream API来实现两个字符串列表的差集。代码示例如下:
```java
List<String> list1 = Arrays.asList("apple", "banana", "pear", "orange");
List<String> list2 = Arrays.asList("banana", "orange", "kiwi");
List<String> diff = list1.stream().filter(item -> !list2.contains(item)).collect(Collectors.toList());
System.out.println(diff); // 输出 [apple, pear]
```
上述代码首先定义了两个字符串列表,然后使用Stream API的`filter`方法和`contains`方法来实现差集,最后将结果收集为一个新的列表。
阅读全文