我有一个列表如下,我想按客户号码在hashmap排序。名单上有两个客户的信息。
list[bookrecord[clientnumber=1,columnnames=[name],data=[ def]],bookrecord[clientnumber=2,columnnames=[name],data=[ghi gkl]],bookrecord[clientnumber=1,columnnames=[address],data=[1213]],bookrecord[clientnumber=2,columnnames=[address],data=[456]]
我正在用下面的代码尝试这个。
public static Map<String, BookRecord> process(List<BookRecord> bookRecords) {
Map<String, BookRecord> processedMap = new HashMap<String, BookRecord>();
for (BookRecord bookRecord : bookRecords) {
BookRecord existingBook = processedMap.get(bookRecord.getClientNumber());
if(existingBook != null) {
existingBook.addRecords(bookRecord);
} else {
processedMap.put(bookRecord.getClientNumber(), bookRecord);
}
}
return processedMap;
}
一旦现有的book不是空的,并且我向现有的book添加了值,我就可以看到列名也被添加到另一个记录(client2)中。列名和数据的创建方式相同。下面是我添加记录的代码
public void addRecords(BookRecord bookRecord) {
if ( this.columnNames.isEmpty()) {
this.columnNames = new ArrayList<>();
}
this.columnNames.addAll(bookRecord.getColumnNames());
if ( this.data.isEmpty()) {
this.data = new ArrayList<>();
}
this.data.addAll(bookRecord.getData());
}
我不能忽略重复的值,因为可能存在我不应该忽略的重复值。
由于列名被添加了两次,最后的答案如下{1=bookrecord[clientnumber=1,columnnames=[name,address,address],data=[ def,1213]],2=bookrecord[clientnumber=2,columnnames=[name,address,address],data=[ghi gkl,456]}
当我在另一台电脑上尝试时,地址是先读的,所以名字是重复的。我试图处理该值并将其删除,但一旦我更新第二条记录就会被更新。需要-->{1=bookrecord[clientnumber=1,columnnames=[name,address],data=[ def,1213]],2=bookrecord[clientnumber=2,columnnames=[name,address],data=[ghi gkl,456]}请帮助我
2条答案
按热度按时间wmtdaxz31#
我的答案需要Java8或更高版本。你的
BookRecord
班级:这种方法应该做到:
pftdvrlh2#
我发现了问题。问题不在于这段代码,而是我生成初始列表的地方。我正在读取一个文件的列,并将它们添加到一个文件的其余记录中。因此,两个columnname对象共享相同的id。我所要做的就是将新创建的列名 Package 到一个新的arraylist中,如->new arraylist<>(columnnames)