我有 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]}
为了得到这个结果,我必须覆盖 Student
的 toString()
方法来打印 Id
。我希望它有所帮助。
关于java - 如果元素的键重复但值必须附加到 java 中的单个键,如何从列表中删除该元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36997367/