我有一个包含2个属性(date and an integer value
)的对象列表。我正在尝试编写一个Java 8 lambda函数来过滤列表,以这样一种方式:2.00 and 4.00
之间的时间平均值应分别计算,4.01 and 6.00
之间的时间值独立计算,而与日期< / p>
public class Obj{
private Date date;
private int value;
}
对象映射示例如下
[
{
date: '2010-02-01 2.00',
value: 20
},
{
date: '2010-02-01 4.00',
value: 5
},
{
date: '2010-02-02 3.00',
value: 55
},
{
date: '2010-02-02 3.30',
value: 7
},
{
date: '2010-02-03 5.00',
value: 88
},
{
date: '2010-02-03 5.20',
value: 1
}
]
在这里,20, 5, 55, 7
值应单独计算,因为当日期值在2.00到4.00之间时,它们在那里
同样,88 and 1
应该分开计算,因为这些值是时间为4.01和6.00的地方
任何帮助将不胜感激
答案 0 :(得分:0)
为了简化代码。像这样更改您的Obj类
class Obj {
private String date;
private int value;
}
并且数据仅包含小时
分组和归约代码如下:
list.stream()
.collect(Collectors.groupingBy(new Function<Obj, Integer>() {
@Override
public Integer apply(Obj o) {
return (int) Float.parseFloat(o.getDate()) / 4;
}
}, Collectors.summarizingInt(new ToIntFunction<Obj>() {
@Override
public int applyAsInt(Obj value) {
return value.getValue();
}
}));