我正在尝试在列表的第3列中添加值,这些值在第2列中具有相同的值。例如,[2,20003,4] [2,20003,7]将返回[2,20003] ,11],因为他们在中间栏目中共享20003。
public static void main(String[] args) throws IOException
{
CSVReader reader = new CSVReader(new FileReader("file"), ',', '"', 1);
List<String[]> allRows = reader.readAll();
for(String[] row : allRows)
{
System.out.println(Arrays.toString(row));
}
}
示例输出(以3列输出) [1,10002,4] [1,10004,6] [1,10008,2] [1,10010,3] [1,10010,3] [2,10007,10] [2,20003,4] [2,20003,7] [2,30019,1] [2,30020,9]
答案 0 :(得分:0)
这将使用sum替换第三个元素,如果相同的第一个和第二个元素出现多次,则创建重复的项目:
Map<String, Integer> map
= allRows.stream()
.collect(Collectors.groupingBy(a -> a[1],
Collectors.summingInt(a -> Integer.valueOf(a[2]))));
List<String[]> out
= allRows.stream()
.map(a -> new String[]{a[0], a[1], map.get(a[1]).toString()})
.collect(Collectors.toList());
用此替换最后一个语句以消除重复。
out
= allRows.stream()
.map(a -> new String[]{a[0], a[1], map.get(a[1]).toString()})
.map(a -> Arrays.toString(a))
.distinct()
.map(s -> s.substring(1, s.length()-1).split(","))
.collect(Collectors.toList());