java中list进行分组根据手机号相同的数据将其余数据以分割生成一个新的list
可以使用Java 8的流操作和Collectors.groupingBy()方法来实现列表分组。具体步骤如下:
- 创建一个用于存储原始数据的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;
}
}
}
以上代码定义了两个类:Data表示原始数据,GroupedData表示分组后的数据。在示例中,首先创建了一个包含原始数据的List,然后使用流操作进行分组和转换,最后将分组后的数据存储到一个新的List中。最后,通过循环打印结果。
运行上述代码将输出以下结果:
手机号: 123456789
数据: A,B
手机号: 987654321
数据: C,D
在上述示例中,我们假设原始数据中的手机号是字符串类型,你可以根据实际情况进行修改
原文地址: http://www.cveoy.top/t/topic/iC5f 著作权归作者所有。请勿转载和采集!