Java List 分组:根据手机号相同数据,以逗号分隔其他数据生成新 List

使用 Java 8 的流操作和 Collectors.groupingBy() 方法可以轻松实现对 List 的分组。本文将介绍如何根据手机号相同的数据,将其余数据以逗号分隔生成一个新的 List。

步骤

  1. 创建一个用于存储原始数据的 List。
  2. 使用 Collectors.groupingBy() 方法将手机号作为键进行分组。
  3. 使用 Collectors.mapping() 方法将除手机号外的数据以逗号分隔生成一个新的字符串。
  4. 将每个分组的数据转换为一个新的对象,包含手机号和以逗号分隔的数据。
  5. 将分组后的数据存储到一个新的 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 类表示原始数据,包含 phoneNumberdata 属性。
  • GroupedData 类表示分组后的数据,包含 phoneNumberdata 属性,其中 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。该方法简单易用,可以有效地提高代码效率。

注意: 以上代码假设原始数据中的手机号是字符串类型,你可以根据实际情况进行修改。

Java List 分组:根据手机号相同数据,以逗号分隔其他数据生成新 List

原文地址: https://www.cveoy.top/t/topic/qjJG 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录