我有清单,
但是,我想做的是, 在列表中,密钥是重复的,因此我必须删除该记录,但该值应附加到单个密钥
我的方法:
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
答案 0 :(得分:3)
您正尝试将值(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]}
要获得此结果,我必须覆盖toString()
的{{1}}方法才能打印Student
。我希望它有所帮助。
答案 1 :(得分:0)
您问题中的代码不会产生您所说的输出,以下代码会生成预期的输出。
Student1 1000,1002,1003
输出:
{{1}}