stream流对某一字段相同的另一个字段的值以,隔开合并
时间: 2024-03-15 13:47:29 浏览: 18
可以使用Java 8的Stream API中的Collectors.groupingBy()和Collectors.mapping()方法来实现。假设有一个包含对象的List,每个对象包含两个字段,如下所示:
```
List<MyObject> myObjects = Arrays.asList(
new MyObject("A", 1),
new MyObject("B", 2),
new MyObject("A", 3),
new MyObject("C", 4),
new MyObject("B", 5)
);
```
现在想要将对象按照第一个字段进行分组,并将每个分组中第二个字段的值以逗号隔开合并成一个字符串。可以使用以下代码实现:
```
Map<String, String> result = myObjects.stream()
.collect(Collectors.groupingBy(MyObject::getField1,
Collectors.mapping(MyObject::getField2, Collectors.joining(","))));
```
其中MyObject是对象类名,getField1和getField2是对象类中的两个字段名。执行以上代码后,会得到一个Map,其中键为第一个字段的值,值为第二个字段的值以逗号隔开合并后的字符串。例如,对于以上的示例数据,得到的结果为:
```
{A=1,3, B=2,5, C=4}
```
相关问题
stream流操作list对某一字段相同的另一个字段的值以,隔开合并
可以使用Java 8的Stream API中的Collectors.groupingBy()和Collectors.mapping()方法来实现。假设有一个包含对象的List,每个对象包含两个字段,如下所示:
```
List<MyObject> myObjects = Arrays.asList(
new MyObject("A", 1),
new MyObject("B", 2),
new MyObject("A", 3),
new MyObject("C", 4),
new MyObject("B", 5)
);
```
现在想要将对象按照第一个字段进行分组,并将每个分组中第二个字段的值以逗号隔开合并成一个字符串。可以使用以下代码实现:
```
Map<String, String> result = myObjects.stream()
.collect(Collectors.groupingBy(MyObject::getField1,
Collectors.mapping(MyObject::getField2, Collectors.joining(","))));
```
其中MyObject是对象类名,getField1和getField2是对象类中的两个字段名。执行以上代码后,会得到一个Map,其中键为第一个字段的值,值为第二个字段的值以逗号隔开合并后的字符串。例如,对于以上的示例数据,得到的结果为:
```
{A=1,3, B=2,5, C=4}
```
Stream流处理将两个集合的相同字段,赋值到另一个集合
假设有两个类,ClassA和ClassB,都有一个相同的字段field,现在要将这两个类的field字段的值赋值到一个新的类ClassC中,可以使用Java 8中的Stream流处理来实现。具体代码如下:
```java
List<ClassA> listA = new ArrayList<>();
List<ClassB> listB = new ArrayList<>();
// 添加数据到 listA 和 listB 中
List<ClassC> listC = Stream.concat(listA.stream(), listB.stream())
.map(obj -> new ClassC(obj.getField()))
.collect(Collectors.toList());
```
这段代码首先使用Stream.concat()方法将listA和listB合并成一个流,然后使用map()方法将每个对象的field字段值提取出来,再用这些值创建一个新的ClassC对象,并最终使用collect()方法将所有的ClassC对象收集到一个列表中。