从 java 中的流 api 调用方法
Invoke method from stream api in java
我是 java 的新手 8.I 正在尝试以下场景。
class Numbers{
private Long userId;
private Long number1;
private Long number2;
}
List<Numbers> list = new ArrayList();
Input == {
"userId":1,
"number1":10,
"number2":20
}
{
"userId":1,
"number1":20,
"number2":40
}
输出::地图
{
"userId":1,
"sum":90 // addition of all numbers associated with userId
}
我想使用 java 8 流 api。
我正在这样尝试,但它给了我错误,
Map<Long, Long> hashMap =results.stream().collect(Collectors.toMap(Numbers::userId,Collectors.summingLong(?));
所以我的问题是
我可以从 Collectors.toMap()
调用下面的方法吗
Long addNumbers(Long number1,Long number2){
return number1+number2;
}
下游收集器 Collectors::groupingBy
有一种更简单的方法:
results.stream().collect(
Collectors.groupingBy(
Numbers::getUserId, Collectors.summingLong(x -> x.getNumber1() + x.getNumber2())
)
);
您仍然可以使用 Collectors.toMap
:
results.stream().collect(
Collectors.toMap(
Numbers::getUserId,
x -> x.getNumber1() + x.getNumber2(),
Long::sum
)
);
或者没有流:
Map<Long, Long> all = new HashMap<>();
numbers.forEach(x -> all.merge(
x.getUserId(),
x.getNumber1() + x.getNumber2(),
Long::sum);
我是 java 的新手 8.I 正在尝试以下场景。
class Numbers{
private Long userId;
private Long number1;
private Long number2;
}
List<Numbers> list = new ArrayList();
Input == {
"userId":1,
"number1":10,
"number2":20
}
{
"userId":1,
"number1":20,
"number2":40
}
输出::地图
{
"userId":1,
"sum":90 // addition of all numbers associated with userId
}
我想使用 java 8 流 api。
我正在这样尝试,但它给了我错误,
Map<Long, Long> hashMap =results.stream().collect(Collectors.toMap(Numbers::userId,Collectors.summingLong(?));
所以我的问题是
我可以从 Collectors.toMap()
Long addNumbers(Long number1,Long number2){
return number1+number2;
}
下游收集器 Collectors::groupingBy
有一种更简单的方法:
results.stream().collect(
Collectors.groupingBy(
Numbers::getUserId, Collectors.summingLong(x -> x.getNumber1() + x.getNumber2())
)
);
您仍然可以使用 Collectors.toMap
:
results.stream().collect(
Collectors.toMap(
Numbers::getUserId,
x -> x.getNumber1() + x.getNumber2(),
Long::sum
)
);
或者没有流:
Map<Long, Long> all = new HashMap<>();
numbers.forEach(x -> all.merge(
x.getUserId(),
x.getNumber1() + x.getNumber2(),
Long::sum);