Ibr*_*him 4 java java-8 java-stream
我有一个Customer对象列表
class Customer {
//Other properties
Map<String, Object> additionalData;
}
Run Code Online (Sandbox Code Playgroud)
当我得到了List<Customer> customers,我要总结一个名为关键transactions在additionalData.我怎么能用java 8流做到这一点?
您可以将列表中的每个元素映射到相应映射中"transactions"键的值,然后将这些值相加:
int sum = customers.stream()
.map(c->(Integer)c.additionalData.get("transactions"))
.filter(Objects::nonNull)
.mapToInt (Integer::intValue)
.sum();
Run Code Online (Sandbox Code Playgroud)
例如:
Customer c1 = new Customer();
c1.additionalData = new LinkedHashMap<> ();
c1.additionalData.put ("transactions", 14);
Customer c2 = new Customer();
c2.additionalData = new LinkedHashMap<> ();
c2.additionalData.put ("transactions", 7);
Customer c3 = new Customer();
c3.additionalData = new LinkedHashMap<> ();
List<Customer> customers = Arrays.asList (c1,c2,c3);
int sum = customers.stream()
.map(c->(Integer)c.additionalData.get("transactions"))
.filter(Objects::nonNull)
.mapToInt (Integer::intValue)
.sum();
System.out.println ("sum is " + sum);
Run Code Online (Sandbox Code Playgroud)
输出:
sum is 21
Run Code Online (Sandbox Code Playgroud)
此代码假设additionalData成员永远不会null,并且"transactions"密钥的值(如果它存在Map)始终是Integer.如果这些假设不正确,则应相应地调整代码.
| 归档时间: |
|
| 查看次数: |
953 次 |
| 最近记录: |