Map> repeatMap = new HashMap<>();
Map existMap = new HashMap<>();
for (Book book : bookList) {
String key = book.getName();
boolean containsKey = existMap.containsKey(key);
// 如果已经存在了,那么就说明已经重复了
if (containsKey) {
boolean containsInMap = repeatMap.containsKey(key);
// 没有添加过
if (!containsInMap) {
List repeatList = new ArrayList<>();
// 转移
Book existBook = existMap.remove(key);
repeatList.add(existBook);
repeatList.add(book);
repeatMap.put(key, repeatList);
}
// 如果map中没有这个值,那么就直接保存
List repeatList = repeatMap.get(key);
repeatList.add(book);
}
existMap.put(key, book);
}
// 对map进行求和,并加入到合并的list中
for (Map.Entry> entry : repeatMap.entrySet()) {
List repeatList = entry.getValue();
Book first = repeatList.get(0);
int i = 1;
for (; i < repeatList.size() - 1; i++) {
Book book = repeatList.get(i);
Long oldVal = first.getCount();
Long incrementVal = book.getCount();
first.setCount(oldVal + incrementVal);
}
String key = first.getName();
existMap.put(key, first);
}
ArrayList bookArrayList = new ArrayList<>(existMap.values());
System.out.println(bookArrayList);