java - 如果元素的键重复但值必须附加到 java 中的单个键,如何从列表中删除该元素?

标签 java

我有 list ,

但是,我想做的是, 在列表中,键是重复的,所以我必须删除该记录,但值应该附加到单个键

我的方法:

ArrayList<Students> students = new ArrayList<Students>();
student = getDetails();
    for(int i=0;i<students.size();i++)
     {
       for(int j=i+1;j<students.size();j++)
        {
           if(students.get(i).getName().equals(students.get(j).getName()))
             {
                string name=students.get(j).getName();
                students.set(i).setName(students.get(i).getName()+","+name"");
                students.remove(j);
             }
        }
     }

在这里,我只能将索引 1 值附加到索引 0..循环正在退出以进行下一次迭代。

Input:
Name=Student1   Id=1000, 
Name=Student1   Id=1003, 
Name=Student1   Id=1004,


Expected output:
Name=Student1   Id=1000, 1003,1004

Actual getting output:
Name=student1 Id=1000,1003
Name=student1 Id=1004

最佳答案

您正在尝试将值 (Student) 分配给键 (Name),其中给定键可以有多个值。您应该使用 Multimap 结构而不是数组(参见 Oracle documentation )。

这可以使用 Java 8 Streams 自动完成:

    Student s1 = new Student("Student1", 1000);
    Student s2 = new Student("Student1", 1003);
    Student s3 = new Student("Student1", 1004);
    List<Student> l = Arrays.asList(s1,s2,s3); 
    Map<String, List<Student>> z = l.stream().collect(Collectors.groupingBy(Student::getName));
    System.out.println(z);

输出符合预期: {Student1=[Id=1000, Id=1003, Id=1004]}

为了得到这个结果,我必须覆盖 StudenttoString() 方法来打印 Id。我希望它有所帮助。

关于java - 如果元素的键重复但值必须附加到 java 中的单个键,如何从列表中删除该元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36997367/

相关文章:

java - 打印集合

Java: Action 作为对象?继承异常处理程序?

java - 如何获取 JComboBox 弹出菜单列表作为组件对象

java - 如何等到图像在 Java 中完全加载

java - 如何修改Intent中类的名称(变量而不是硬编码)?

java - Parcelable:在 fragment 旋转时解码错误时未找到类

java - 冰雹序列法

java - 是否可以设计一个递归来控制输出结果?

java - JDBC Sybase 到 MySQL 转换器

java - 字符大小是 8 位还是 16 位?