本教程将展示如何使用 Java 8 的 Stream 和 groupingBy 方法将 List 中的元素根据手机号分组,并将同一组中其他字段的值使用逗号分隔合并成字符串。

示例代码:

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        List<Person> persons = Arrays.asList(
                new Person('123456789', 'John'),
                new Person('123456789', 'Alice'),
                new Person('987654321', 'Bob'),
                new Person('987654321', 'Jane'),
                new Person('987654321', 'Tom')
        );

        Map<String, String> groupedData = persons.stream()
                .collect(Collectors.groupingBy(Person::getPhoneNumber,
                        Collectors.mapping(Person::getName, Collectors.joining(","))));

        List<String> newDataList = groupedData.entrySet().stream()
                .map(entry -> entry.getKey() + ": " + entry.getValue())
                .collect(Collectors.toList());

        newDataList.forEach(System.out::println);
    }
}

class Person {
    private String phoneNumber;
    private String name;

    public Person(String phoneNumber, String name) {
        this.phoneNumber = phoneNumber;
        this.name = name;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public String getName() {
        return name;
    }
}

输出结果:

987654321: Bob,Jane,Tom
123456789: John,Alice

在这个例子中,我们创建了一个 Person 类,包含了 phoneNumbername 两个字段。然后创建了一个 persons 列表,包含了一些 Person 对象。

我们使用 streamgroupingBy 方法来根据 phoneNumber 进行分组,并使用 joining 方法将同一分组内的 name 连接起来,生成一个逗号分隔的字符串。

最后,我们使用 entrySet 方法将分组后的数据转换为新的列表。每个列表元素都是一个包含 phoneNumber 和逗号分隔的 name 字符串的组合。

请根据实际数据结构和需求进行相应的调整。

总结:

本教程展示了如何使用 Java 8 的 StreamgroupingBy 方法对 List 中的元素进行分组,并使用 joining 方法合并同一组中的其他字段值。这是一种简单高效的方式来处理数据分组和合并操作。

提示:

  • 你可以根据需要修改 Person 类和 phoneNumber 字段的名称。
  • 你可以将 joining 方法的 delimiter 参数修改为其他分隔符,例如空格或分号。
  • 你可以使用其他 Collectors 方法来处理分组后的数据,例如 countingaveragingInt

希望本教程能够帮助你更好地理解 Java 8 的 Stream API,并为你的开发工作提供帮助。

Java List 分组:根据手机号合并姓名,使用 Stream 和 GroupingBy

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

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