java 两个list过滤
时间: 2023-09-27 21:08:55 浏览: 25
如果你想从一个 List 中过滤掉另一个 List 中的所有元素,可以使用 Java 8 中的 stream 和 filter 方法。
假设我们有两个 List,一个是原始数据 List,另一个是需要过滤掉的 List,可以按照以下步骤进行过滤:
1. 使用 stream() 方法将原始数据 List 转换为 Stream。
2. 使用 filter() 方法过滤掉在需要过滤的 List 中存在的元素。
3. 使用 collect() 方法将过滤后的 Stream 转换回 List。
以下是示例代码:
```java
List<String> originalList = Arrays.asList("apple", "orange", "banana", "pear");
List<String> filterList = Arrays.asList("orange", "pear");
List<String> filteredList = originalList.stream()
.filter(e -> !filterList.contains(e))
.collect(Collectors.toList());
System.out.println(filteredList); // 输出 [apple, banana]
```
在上述示例中,我们将原始数据 List 转换为 Stream,使用 filter() 方法过滤掉在需要过滤的 List 中存在的元素,并使用 collect() 方法将过滤后的 Stream 转换回 List。最后,输出过滤后的 List。
如果你需要更高效的过滤方式,可以考虑使用 HashSet 来存储需要过滤的元素,这样可以将时间复杂度从 O(n^2) 降到 O(n)。
以下是使用 HashSet 进行过滤的示例代码:
```java
List<String> originalList = Arrays.asList("apple", "orange", "banana", "pear");
Set<String> filterSet = new HashSet<>(Arrays.asList("orange", "pear"));
List<String> filteredList = originalList.stream()
.filter(e -> !filterSet.contains(e))
.collect(Collectors.toList());
System.out.println(filteredList); // 输出 [apple, banana]
```
在上述示例中,我们将需要过滤的 List 转换为 HashSet,并使用 contains() 方法来判断需要过滤的元素是否存在。这样可以将时间复杂度降低到 O(n)。