Java遍历List对象根据相同值合并拼接

在Java开发中,经常需要处理集合类的对象,特别是List。在某些情况下,我们可能需要根据某个属性的相同值对List中的对象进行合并和拼接。本文将通过示例代码详细说明如何实现这一功能,并给出具体的实现步骤与代码示例。

场景描述

假设我们有一个Person类,其中包含两个属性:namehobby。我们希望通过遍历一个List<Person>对象,将拥有相同name的人的hobby进行合并拼接。

public class Person {
    private String name;
    private String hobby;

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

    public String getName() {
        return name;
    }

    public String getHobby() {
        return hobby;
    }

    public void setHobby(String hobby) {
        this.hobby = hobby;
    }
}

实现步骤

  1. 创建一个List存储Person对象。
  2. 使用Map对List进行分组。
  3. 对每组的hobby进行拼接。
  4. 将拼接后的结果转换为List返回。

示例代码

下面的代码实现了上述步骤。

import java.util.*;

public class Main {
    public static void main(String[] args) {
        List<Person> people = Arrays.asList(
            new Person("Alice", "Reading"),
            new Person("Bob", "Cooking"),
            new Person("Alice", "Travelling"),
            new Person("Bob", "Swimming")
        );

        List<Person> mergedPeople = mergePeople(people);
        
        for (Person person : mergedPeople) {
            System.out.println("Name: " + person.getName() + ", Hobbies: " + person.getHobby());
        }
    }

    public static List<Person> mergePeople(List<Person> people) {
        Map<String, StringBuilder> map = new HashMap<>();

        for (Person person : people) {
            map.putIfAbsent(person.getName(), new StringBuilder());
            if (map.get(person.getName()).length() > 0) {
                map.get(person.getName()).append(", ");
            }
            map.get(person.getName()).append(person.getHobby());
        }

        List<Person> mergedList = new ArrayList<>();
        for (Map.Entry<String, StringBuilder> entry : map.entrySet()) {
            mergedList.add(new Person(entry.getKey(), entry.getValue().toString()));
        }

        return mergedList;
    }
}

解释

在以上代码中,我们首先创建了一个List<Person>对象 people,然后调用 mergePeople 方法对其进行处理。使用HashMapname为键,StringBuilder为值存储同名Person的爱好。在拼接过程中,我们使用了append方法来将爱好相连。

关系图

为了更直观地理解程序的结构,下面是一个使用Mermaid语法表示的ER图。

erDiagram
    PERSON {
        string name
        string hobby
    }

总结

通过上面的示例,我们实现了一个简单的功能,能够根据name合并相同的hobby。这种方法不仅适用于Person类,还可以扩展到其他任何对象类型,只需根据需求调整合并逻辑。在处理大规模数据时,这种合并拼接的方式能有效提高程序的可读性和维护性。希望本文能帮助您更好地理解Java集合操作,让您的开发工作更加高效!