我有一个Arraylists的Arraylist。首先,我试图比较所有的arraylists,如果第一个元素是相等的,将所有重复的arraylists合并为一个,并将每个元素的最后元素相加。每个arraylist都有固定大小的3个元素。
例如:
ArrayList<String> archiveList = new ArrayList<String>();
archiveList.add("2605");
archiveList.add("SD");
archiveList.add("25");
ArrayList<String> archiveList2 = new ArrayList<String>();
archiveList2.add("3470");
archiveList2.add("SD2");
archiveList2.add("25");
ArrayList<String> archiveList3 = new ArrayList<String>();
archiveList3.add("2605");
archiveList3.add("SD2");
archiveList3.add("20");
ArrayList<String> archiveList4 = new ArrayList<String>();
archiveList4.add("2605");
archiveList4.add("SD2");
archiveList4.add("20");
//code to consolidate arraylists
ArrayList<ArrayList<String>> dataTable = new ArrayList<ArrayList<String>>();
dataTable.addRow(archiveList);
我希望最终结果成为 archiveList = [“2605”,“SD”,“65”]; //最后一个元素是来自prev数组的总和(25 + 25 + 20) archiveList = [“3470”,“SD2”,“20”]
提前谢谢你,祝大家新年快乐!
答案 0 :(得分:1)
以下Java 8解决方案可以解决您的问题:
// First, group the lists by the "id" i.e. the first entry in each list
final Map<String, List<List<String>>> groupedLists =
Stream.of(archiveList1, archiveList2, archiveList3, archiveList4)
.collect(Collectors.groupingBy(l -> l.get(0)));
// Now, setup the result
final List<List<String>> result = groupedLists.values()
.stream()
.map(ll -> {
String first = ll.get(0).get(0); // The key e.g. "2605"
String second = ll.get(0).get(1); // The second element e.g. "SD"
// Summarize the lists with the same "id"
int sum = ll.stream()
.map(archive -> archive.get(2)) // This is the "number"
.mapToInt(Integer::parseInt) // convert it to an int
.sum(); // And summarize
// This list holds the aggregated result
List<String> aggregate = new ArrayList<>();
aggregate.add(first);
aggregate.add(second);
aggregate.add(Integer.valueOf(sum).toString());
return aggregate;
})
.collect(Collectors.toList()); // Finally, collect the whole thing to a list of lists
答案 1 :(得分:0)
您可以使用HashSet
,其中所有ArrayList
元素都可以添加到此HashSet
中。
最后你可以看到相同的元素将被合并。换句话说,whilo集中只存在一个元素。