Java List 分组:根据手机号相同数据,以逗号分隔其他数据生成新 List
Java List 分组:根据手机号相同数据,以逗号分隔其他数据生成新 List
使用 Java 8 的流操作和 Collectors.groupingBy() 方法可以轻松实现对 List 的分组。本文将介绍如何根据手机号相同的数据,将其余数据以逗号分隔生成一个新的 List。
步骤
- 创建一个用于存储原始数据的 List。
- 使用
Collectors.groupingBy()方法将手机号作为键进行分组。 - 使用
Collectors.mapping()方法将除手机号外的数据以逗号分隔生成一个新的字符串。 - 将每个分组的数据转换为一个新的对象,包含手机号和以逗号分隔的数据。
- 将分组后的数据存储到一个新的 List 中。
示例代码
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Data> dataList = new ArrayList<>();
dataList.add(new Data('123456789', 'A'));
dataList.add(new Data('123456789', 'B'));
dataList.add(new Data('987654321', 'C'));
dataList.add(new Data('987654321', 'D'));
List<GroupedData> groupedDataList = dataList.stream()
.collect(Collectors.groupingBy(Data::getPhoneNumber,
Collectors.mapping(Data::getData, Collectors.joining(','))))
.entrySet().stream()
.map(entry -> new GroupedData(entry.getKey(), entry.getValue()))
.collect(Collectors.toList());
// 打印结果
for (GroupedData groupedData : groupedDataList) {
System.out.println('手机号: ' + groupedData.getPhoneNumber());
System.out.println('数据: ' + groupedData.getData());
System.out.println();
}
}
static class Data {
private String phoneNumber;
private String data;
public Data(String phoneNumber, String data) {
this.phoneNumber = phoneNumber;
this.data = data;
}
public String getPhoneNumber() {
return phoneNumber;
}
public String getData() {
return data;
}
}
static class GroupedData {
private String phoneNumber;
private String data;
public GroupedData(String phoneNumber, String data) {
this.phoneNumber = phoneNumber;
this.data = data;
}
public String getPhoneNumber() {
return phoneNumber;
}
public String getData() {
return data;
}
}
}
运行结果
手机号: 123456789
数据: A,B
手机号: 987654321
数据: C,D
代码解释
Data类表示原始数据,包含phoneNumber和data属性。GroupedData类表示分组后的数据,包含phoneNumber和data属性,其中data属性存储以逗号分隔的其他数据。Collectors.groupingBy()方法将dataList中的数据根据phoneNumber属性进行分组。Collectors.mapping()方法将每个分组中的data属性以逗号分隔生成一个新的字符串。entrySet().stream()将分组结果转换为流,方便进行后续操作。map(entry -> new GroupedData(entry.getKey(), entry.getValue()))将每个分组数据转换为GroupedData对象。collect(Collectors.toList())将分组后的数据存储到一个新的 List 中。
总结
本文介绍了如何使用 Java 8 的流操作和 Collectors.groupingBy() 方法对 List 进行分组,并将每个分组中其他数据以逗号分隔生成一个新的 List。该方法简单易用,可以有效地提高代码效率。
注意: 以上代码假设原始数据中的手机号是字符串类型,你可以根据实际情况进行修改。
原文地址: https://www.cveoy.top/t/topic/qjJG 著作权归作者所有。请勿转载和采集!