java通过steam过滤出A集合里B集合没有的数据
时间: 2024-05-09 17:16:25 浏览: 118
可以通过Java 8中的Stream API来实现这个功能。具体实现如下:
假设有两个集合A和B,我们要过滤出A集合中B集合没有的数据。
```java
List<String> listA = Arrays.asList("a", "b", "c", "d", "e");
List<String> listB = Arrays.asList("b", "d", "f");
List<String> result = listA.stream().filter(a -> !listB.contains(a)).collect(Collectors.toList());
System.out.println(result); // 输出 [a, c, e]
```
首先,我们使用`Arrays.asList`方法创建两个集合A和B,然后使用`stream()`方法将A集合转化为一个流。
接着,我们调用`filter`方法,使用`!listB.contains(a)`判断当前流中的元素a是否存在于B集合中,如果不存在,则返回`true`,表示我们要保留该元素;如果存在,则返回`false`,表示我们要过滤掉该元素。
最后,我们使用`collect`方法将过滤出来的元素收集到一个新的集合中,并将它输出到控制台上。
相关问题
java集合的steam流获取集合的重复元素
可以使用Java 8中的Stream流来获取集合的重复元素。可以使用groupingBy()方法和filter()方法来实现。
下面是一个示例代码:
```java
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1, 2, 3, 4, 1, 2, 5, 6, 5);
Map<Integer, Long> map = list.stream()
.collect(Collectors.groupingBy(i -> i, Collectors.counting()));
List<Integer> result = map.entrySet().stream()
.filter(entry -> entry.getValue() > 1)
.map(Map.Entry::getKey)
.collect(Collectors.toList());
System.out.println(result); // 输出 [1, 2, 5]
}
}
```
首先,使用groupingBy()方法将集合中的元素分组并计数。然后,使用filter()方法过滤出计数大于1的元素,并使用map()方法将它们转换为List类型的结果。最后,输出结果。
JAVA steam 过滤 获取新对象
在Java中,"Steam"通常是指Stream API,这是Java 8及以上版本引入的一个强大的特性,用于处理集合数据流。如果你想过滤并获取新的对象,你可以使用`filter()`函数结合`map()`函数。
例如,如果你有一个`List<Person>`,其中包含一些`Person`对象,并且你想过滤出年龄大于18岁的,可以这样做:
```java
List<Person> people = ... // 初始化你的人员列表
List<Person> adults = people.stream() // 转换成流
.filter(person -> person.getAge() > 18) // 过滤条件,只保留年龄大于18的
.map(Person::new) // 如果需要的话,映射每个符合条件的对象为一个新的实例
.collect(Collectors.toList()); // 收集结果到新的列表
// 现在adults列表只包含年龄大于18岁的人
```
这里假设`Person`类有一个名为`getAge()`的方法返回年龄。`map(Person::new)`是用来创建新实例的,如果不需要创建新的对象,可以直接去掉这行。
阅读全文