我需要在lambda中做以下操作,但无法想出单流和还原(s)可以帮助的方法:(
Output类具有->Integer cost1,Integer cost2
List <Employee> employeeList = new ArrayList<>();
// data population in inputMap
Map<String, Output> outputMap = new HashMap<>();
for (Employee emp : employeeList)
{
Output op = outputMap.get(emp.getName());
if(op == null){
Output newOp = new Output ();
newOp.setCost1(emp.getCost1())
newOp.setCost2(emp.getCost2())
newOp.put(emp.getName(), newOp);
}else{
int cost1 = op.getCost1() + emp.getCost1();
int cost2 = op.getCost2() + emp.getCost2();
op.setCost1(cost1);
op.setCost2(cost2);
newOp.put(emp.getName(), op);
}
}
我假设你有一个类似于这样的结构:
static class Output {
private final int cost1;
private final int cost2;
public Output(int cost1, int cost2) {
this.cost1 = cost1;
this.cost2 = cost2;
}
@Override
public String toString() {
return "cost1 = " + cost1 + " cost2 = " + cost2;
}
// ... getter
}
static class Employee {
private final String name;
private final int cost1;
private final int cost2;
public Employee(String name, int cost1, int cost2) {
this.name = name;
this.cost1 = cost1;
this.cost2 = cost2;
}
// ...getters
}
则解决方案是首先按Employee::GetName
分组,然后通过集合器还原为
output
。reduce
Map<String, Output> map = Arrays.asList(
new Employee("e", 12, 12),
new Employee("f", 13, 13),
new Employee("e", 11, 11))
.stream()
.collect(Collectors.groupingBy(Employee::getName,
Collectors.reducing(
new Output(0, 0),
emp -> new Output(emp.getCost1(), emp.getCost2()),
(left, right) -> new Output(left.getCost1() + right.getCost1(), left.getCost2() + right.getCost2()))));
System.out.println(map); // {e=cost1 = 23 cost2 = 23, f=cost1 = 13 cost2 = 13}
这是可能的吗,以及如何使用这样的逻辑进行一行(或短)var赋值: 我试图做到: 但得到一个错误:“运算符|未在字符串上定义”。 所以我来自JS,并试图实现: 但要“走” 由于它是静态类型的Lang,我的意思是如果b == " "(空字符串)
原文: http://exploringjs.com/impatient-js/ch_variables-assignment.html 下面这些是 JavaScript 声明变量的主要方式: let用来声明可变变量。 const用来声明常量(不可变变量)。 在ES6之前,还有var。但它有些怪癖,所以最好在现代JavaScript程序中避免使用它。你可以在“Speaking JavaScript
问题内容: 在许多Java源代码中(例如),我看到了类似的东西; 我了解基本模式(锁定,最终解锁),但是我的问题是, 为什么在使用它之前先对本地作用域的Lock变量进行赋值? 为什么这样做而不是以下内容? 它会影响优化吗?第一个示例可以防止锁变粗吗? 评论后编辑 :如果您真的不知道为什么会出现这种情况,请不要添加答案。这是从Java来源获得的,@author标记是Doug Lea,所以我很确定它的
主要内容:声明变量,变量赋值Java 语言是强类型(Strongly Typed)语言,强类型包含以下两方面的含义: 所有的变量必须先声明、后使用。 指定类型的变量只能接受类型与之匹配的值。 这意味着每个变量和每个表达式都有一个在编译时就确定的类型。类型限制了一个变量能被赋的值,限制了一个表达式可以产生的值,限制了在这些值上可以进行的操作,并确定了这些操作的含义。 常量和变量是 Java 程序中最基础的两个元素。常量的值是不
我使用以下代码创建kafka流: 我给每个流不同的组ID。当我运行应用程序时,只接收到部分kafka消息,并且执行程序在foreachRDD调用中挂起。如果我只创建一个流,一切正常。日志信息没有任何例外。 我不知道为什么应用程序卡在那里。这是否意味着没有足够的资源?
问题 如果一个可迭代对象的元素个数超过变量个数时,会抛出一个 ValueError 。 那么怎样才能从这个可迭代对象中解压出 N 个元素出来? 解决方案 Python 的星号表达式可以用来解决这个问题。比如,你在学习一门课程,在学期末的时候, 你想统计下家庭作业的平均成绩,但是排除掉第一个和最后一个分数。如果只有四个分数,你可能就直接去简单的手动赋值, 但如果有 24 个呢?这时候星号表达式就派上