import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
class Mainlove {
private int v1;
private int v2;
public Mainlove
(String key,
int v1,
int v2
) { setKey(key);
setV1(v1);
setV2(v2);
}
return key;
}
public void setKey
(String key
) { this.key = key;
}
public int getV1() {
return v1;
}
public void setV1(int v1) {
this.v1 = v1;
}
public int getV2() {
return v2;
}
public void setV2(int v2) {
this.v2 = v2;
}
return String.
format("%s %s %s", getKey
(), getV1
(), getV2
()); }
public static void main
(String[] args
) { List<Mainlove> list = new ArrayList<>();
list.add(new Mainlove("a", 2, 3));
list.add(new Mainlove("b", 1, 1));
list.add(new Mainlove("a", 1, 1));
list.add(new Mainlove("c", 1, 1));
list.add(new Mainlove("b", 1, 1));
// https://h...content-available-to-author-only...i.com/article/1507601898720
// key 进行分组,分组的同时 把 value1 和 value2 求和
// 最后需要的结果是 [a,3,4] [b,2,2] [c,1,1]
List<Mainlove> cml = new ArrayList<>();
list.stream().collect(Collectors.groupingBy(Mainlove::getKey)).forEach((k, v)-> cml.add(new Mainlove(k, v.stream().mapToInt(Mainlove::getV1).sum(), v.stream().mapToInt(Mainlove::getV2).sum())));
cml.
forEach(System.
out::println
);
}
}
CmltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwppbXBvcnQgamF2YS51dGlsLkxpc3Q7CmltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLkNvbGxlY3RvcnM7CgpjbGFzcyBNYWlubG92ZSB7CgogICAgcHJpdmF0ZSBTdHJpbmcga2V5OwogICAgcHJpdmF0ZSBpbnQgdjE7CiAgICBwcml2YXRlIGludCB2MjsKCiAgICBwdWJsaWMgTWFpbmxvdmUoU3RyaW5nIGtleSwgaW50IHYxLCBpbnQgdjIpIHsKICAgICAgICBzZXRLZXkoa2V5KTsKICAgICAgICBzZXRWMSh2MSk7CiAgICAgICAgc2V0VjIodjIpOwogICAgfQoKICAgIHB1YmxpYyBTdHJpbmcgZ2V0S2V5KCkgewogICAgICAgIHJldHVybiBrZXk7CiAgICB9CgogICAgcHVibGljIHZvaWQgc2V0S2V5KFN0cmluZyBrZXkpIHsKICAgICAgICB0aGlzLmtleSA9IGtleTsKICAgIH0KCiAgICBwdWJsaWMgaW50IGdldFYxKCkgewogICAgICAgIHJldHVybiB2MTsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCBzZXRWMShpbnQgdjEpIHsKICAgICAgICB0aGlzLnYxID0gdjE7CiAgICB9CgogICAgcHVibGljIGludCBnZXRWMigpIHsKICAgICAgICByZXR1cm4gdjI7CiAgICB9CgogICAgcHVibGljIHZvaWQgc2V0VjIoaW50IHYyKSB7CiAgICAgICAgdGhpcy52MiA9IHYyOwogICAgfQoKICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICAgICAgcmV0dXJuIFN0cmluZy5mb3JtYXQoIiVzICVzICVzIiwgZ2V0S2V5KCksIGdldFYxKCksIGdldFYyKCkpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICBMaXN0PE1haW5sb3ZlPiBsaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7CiAgICAgICAgbGlzdC5hZGQobmV3IE1haW5sb3ZlKCJhIiwgMiwgMykpOwogICAgICAgIGxpc3QuYWRkKG5ldyBNYWlubG92ZSgiYiIsIDEsIDEpKTsKICAgICAgICBsaXN0LmFkZChuZXcgTWFpbmxvdmUoImEiLCAxLCAxKSk7CiAgICAgICAgbGlzdC5hZGQobmV3IE1haW5sb3ZlKCJjIiwgMSwgMSkpOwogICAgICAgIGxpc3QuYWRkKG5ldyBNYWlubG92ZSgiYiIsIDEsIDEpKTsKCiAgICAgICAgLy8gaHR0cHM6Ly9oLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5pLmNvbS9hcnRpY2xlLzE1MDc2MDE4OTg3MjAKICAgICAgICAvLyBrZXkg6L+b6KGM5YiG57uE77yM5YiG57uE55qE5ZCM5pe2IOaKiiB2YWx1ZTEg5ZKMIHZhbHVlMiDmsYLlkowKICAgICAgICAvLyDmnIDlkI7pnIDopoHnmoTnu5PmnpzmmK8gW2EsMyw0XSBbYiwyLDJdIFtjLDEsMV0KCgogICAgICAgIExpc3Q8TWFpbmxvdmU+IGNtbCA9IG5ldyBBcnJheUxpc3Q8PigpOwoKICAgICAgICBsaXN0LnN0cmVhbSgpLmNvbGxlY3QoQ29sbGVjdG9ycy5ncm91cGluZ0J5KE1haW5sb3ZlOjpnZXRLZXkpKS5mb3JFYWNoKChrLCB2KS0+IGNtbC5hZGQobmV3IE1haW5sb3ZlKGssIHYuc3RyZWFtKCkubWFwVG9JbnQoTWFpbmxvdmU6OmdldFYxKS5zdW0oKSwgdi5zdHJlYW0oKS5tYXBUb0ludChNYWlubG92ZTo6Z2V0VjIpLnN1bSgpKSkpOwoKICAgICAgICBjbWwuZm9yRWFjaChTeXN0ZW0ub3V0OjpwcmludGxuKTsKCgogICAgfQp9Cg==