用stream实现两个list对象,里面有一个字段相同,则拼接两个list信息。
时间: 2024-11-05 20:34:52 浏览: 21
Java lambda list转换map时,把多个参数拼接作为key操作
5星 · 资源好评率100%
在Java中,你可以使用`Stream` API结合`Collectors.groupingBy()`和`Collectors.joining()`来合并两个`List`,如果它们有相同的某个字段,然后把具有相同字段的元素信息连接成字符串。这里假设这两个`List`都是`MyClass`类型的,`myField`是我们要比较的字段名。
```java
import java.util.*;
import java.util.stream.*;
class MyClass {
private String myField;
// 其他构造方法和getter/setter...
}
public List<String> mergeLists(List<MyClass> list1, List<MyClass> list2) {
Map<String, List<MyClass>> map = Stream.concat(list1.stream(), list2.stream())
.collect(Collectors.groupingBy(MyClass::getMyField));
return map.values().stream() // 获取所有具有相同myField的元素
.map(objects -> objects.stream() // 再对每个子列表流进行处理
.map(MyClass::toString) // 转换为字符串
.collect(Collectors.joining(", "))) // 连接为一个逗号分隔的字符串
.collect(Collectors.toList());
}
```
这将返回一个新的`List`,其中包含了所有匹配项的字符串形式,每个字符串表示的是具有相同`myField`的元素列表。
阅读全文