java stream 提取list对象重复数据
时间: 2023-08-22 18:06:01 浏览: 56
可以使用Java 8的Stream API来提取List中的重复对象。使用`distinct()`方法可以过滤掉List中重复的元素,而使用`filter()`方法可以过滤掉不重复的元素,最后使用`collect()`方法将结果收集到一个新的List中。以下是示例代码:
```
List<Person> duplicates = people.stream()
.filter(p -> Collections.frequency(people, p) > 1)
.distinct()
.collect(Collectors.toList());
System.out.println("Duplicates: " + duplicates);
```
这里的`Collections.frequency()`方法可以计算List中某个元素出现的次数,如果大于1则表示该元素重复。`distinct()`方法用于过滤掉List中的重复元素。最后我们使用`collect()`方法将结果收集到一个新的List中。
输出结果为:`Duplicates: [Person{id=1, name='Alice'}, Person{id=3, name='Charlie'}]`。
相关问题
java stream 提取子list 合并新list
你可以使用 Java 8 中的 Stream API 来提取子 List 并合并成新的 List。例如,如果你有一个 List,你想要提取其中一部分并将其合并成一个新的 List,你可以使用 subList() 方法和 Stream API 中的 flatMap() 和 collect() 方法来完成。以下是一个示例代码:
```java
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
// 提取子 List
List<Integer> subList = list.subList(2, 7);
// 合并成新的 List
List<Integer> newList = subList.stream()
.flatMap(Collection::stream)
.collect(Collectors.toList());
```
在上面的代码中,我们首先使用 subList() 方法从原始 List 中提取子 List。然后,我们使用 flatMap() 方法将子 List 中的元素转换为单个 Stream,并使用 collect() 方法将其收集到新的 List 中。
请注意,上面的示例代码仅适用于 List 中存储的元素是对象而不是基本类型。如果你想在处理基本类型时使用 Stream API,请使用 IntStream,LongStream 或 DoubleStream。
java stream 取list对象的某个值
在Java中,使用Stream流取出List对象的某个值非常简单。首先,我们需要将List集合转换为流对象,然后使用流的方法来操作。
假设我们有一个List<User>对象,其中User是一个自定义的类,该类有一个name属性。我们想取出List中所有User对象的name属性。以下是具体的代码示例:
```java
List<User> userList = new ArrayList<>();
userList.add(new User("Tom"));
userList.add(new User("Jerry"));
userList.add(new User("Alice"));
List<String> names = userList.stream()
.map(User::getName) // 使用map方法提取每个User对象的name属性
.collect(Collectors.toList()); // 将结果收集到一个新的List中
System.out.println(names); // 输出结果:[Tom, Jerry, Alice]
```
在上述代码中,我们首先调用`stream()`方法将List转换为流对象,然后使用`map()`方法提取每个User对象的name属性。`map()`方法的参数是一个函数式接口,我们可以使用方法引用语法`User::getName`来简化代码。最后,我们使用`collect()`方法将结果收集到一个新的List中。
通过以上操作,我们成功取出了List对象中所有User对象的name属性,并将结果保存在一个新的List中。