java stream 提取list对象重复数据
时间: 2023-08-22 22:06:01 浏览: 160
可以使用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中对象的ordId属性并去重后转为List<String>
在 Java 中,你可以使用 Stream API 结合 HashSet 或者 LinkedHashSet 来提取列表中对象的某个属性值(如 ordId),并去重后转换为 List<String>。这里假设有一个 User 类,其中包含 ordId 属性:
```java
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
class User {
private String ordId;
// 其他属性...
// 获取 ordId 的 getter 方法
public String getOrdId() {
return ordId;
}
}
List<User> userList = ... // 用户列表
// 使用 Stream API 提取 ordId 并去重
Set<String> uniqueIds = userList.stream()
.map(User::getOrdId) // 转换为字符串流,获取每个对象的 ordId
.collect(Collectors.toSet()); // 去重,转化为 Set
List<String> uniqueList = new ArrayList<>(uniqueIds); // 将 Set 转换回 List
```
`map()` 方法应用到每个 User 对象上,将 ordId 属性值转换为 String,然后 `collect(toSet())` 用于收集并去重。
阅读全文