很简单地说,我有
class Per{
int a;
long b;
double c;
String d;
}
假设我每个有3000个类型的对象,并收集在
列表
中
null
int totalA = 0; long totalB = 0l; long totalC = 0l;
for (Per per : pers) {
if (per.d != null && !per.d.trim().equals("")) {
totalA += per.a;
totalB += per.b;
totalC += someOperation(per.c);
}
}
someoperation
隐含并不重要,因为它可能是简单的,也可能是复杂的。
如何通过Java8流和lambda表达式实现这一点?
一个可能的答案是这样的
int totalA = 0; long totalB=0l;
pers.stream().filter(p->{
if(p == null || p.d == null || p.d.trim().equals(""))
return false;
return true;
}).forEach(per->{
totalA += per.a;
totalB += per.b;
});
注意:我在这里没有进行任何类型的分组,也不能为
创建新的或更新提供的对象。
编写自己的累加器
类和自定义的收集器
,那么这是一个简单的任务。
class Accumulator {
private int a = 0;
private long b = 0L;
private double c = 0d;
public void accumulate(Per p) {
a += p.a;
b += p.b;
c += someOperation(p.c);
}
public Accumulator combine(Accumulator acc) {
a += acc.a;
b += acc.b;
c += acc.c;
return this;
}
// getter, hashCode, ...
}
Accumulator result = pers.stream()
.filter(p -> p != null && p.d != null && !p.d.trim().isEmpty())
.collect(Collector.of(Accumulator::new, Accumulator::accumulate, Accumulator::combine));
我有一个表,其中有3个属性作为主键产品:primary key(,,)。 现在我在另一个表中引用这个复合主键 order_details:外键(product_name,product_type,category)引用产品(product_name,product_type,category) 然而,我在控制台中得到一个错误,说缺少括号,我无法添加外键。但是,如果只在引用中添加两个列名(例如:“F
我正在尝试开发一个ElasticSearch聚合查询,它根据嵌套对象中的属性执行结果的组合。 将为索引设置相应的映射。 我需要的查询如下所示: 查询需要按嵌套属性的名称分组,但从根对象的bin属性分组,这似乎在ElasticSearch中引起了一些麻烦。 当尝试进行以下预固化时: 此上下文似乎不允许基于产品对象的根对项目进行装箱。 ManufacturerName中指定的ManufacturerN
我有以下计数查询: 有没有办法使用single aggregation()和嵌套的$group来实现这一点mongodb@3.2? 我知道这是mapReduce()的一个经典用例,但我在这里没有选择,因为$group by parameters()是一个动态生成的属性,因此聚合阶段的构建也是动态的。 预期输出与两个计数查询的结果相同。-
我有两个不同的csv文件,其中包含两个不同实体上的数据,我必须合并两个不同的csv文件,以创建一个基于sql连接类型equijoin和left join的csv文件。 所以我创建了第一个实体作为类名客户,具有属性: 这个类的对象列表如下: 类似地,我创建了具有属性的二阶实体类: 现在,我需要在orderId的基础上合并这两个对象,并生成第三个对象,其结果类具有上述两个类的所有属性。 请建议我使用j
问题内容: 定义:两个集合的笛卡尔积是这些集合的所有可能对的集合,因此{A,B} x {a,b} = {(A,a),(A,b),(B,a ),(B,b)}。 现在,我想将这样的笛卡尔积插入数据库表(每对成一行)。打算在表中使用每对的默认值,因此此时数据库中不存在数据(即两组)。 任何想法如何使用postgresql实现这一目标? 编辑 : 借助Grzegorz Szpetkowski的答案,我能够
问题内容: 我需要能够在运行时合并两个(非常简单的)JavaScript对象。例如,我想: 有没有人为此提供脚本或知道内置的方式来执行此操作?我不需要递归,也不需要合并函数,只需合并平面对象上的方法即可。 问题答案: ECMAScript 2018标准方法 您将使用对象传播: 现在是和的并集。中的属性将覆盖中的属性。 这也是此语法的MDN文档。如果您正在使用babel,则需要babel-plugi