我有一个名为monitoreddata
的类,用它描述活动及其开始时间和结束时间。这些属性是ActivityLabel
、StartTime
、EndTime
。我必须使用流对这些活动进行分组和过滤,这些活动的总持续时间超过10小时。我成功地计算了持续时间的总和,并根据活动将它们分组:
Map<String, Long> map4 = new HashMap<String, Long>();
map4 = data.stream()
.collect(
Collectors.groupingBy(
MonitoredData::getActivity,
Collectors.summingLong(MonitoredData::getDuration)
)
); //getDuration returns end Time - startTime in milliseconds
.filter(Collectors.summingLong(MonitoredData::getDuration) > whatever)
我将首先像您已经做的那样做:我将monitoreddata
实例流收集到一个映射中,按活动分组,并将每个活动的持续时间加在每个值中:
Map<String, Long> map4 = data.stream()
.collect(Collectors.groupingBy(
MonitoredData::getActivity,
HashMap::new,
Collectors.summingLong(MonitoredData::getDuration)));
细微差别在于,我使用的是collectors.groupingby
的重载版本,它接受映射的工厂,因为在下一步中,我希望删除持续时间小于10小时的条目,并且规范不能保证接受一个或两个参数的collectors.groupingby
方法返回的映射是可变的。
这就是我删除不匹配项的方式:
public static final long TEN_HOURS_MS = 10 * 60 * 60 * 1000;
map4.values().removeIf(v -> v < TEN_HOURS_MS);
如果要在一行中完成所有操作,可能需要使用collectors.collectingandthen
:
Map<String, Long> map4 = data.stream()
.collect(Collectors.collectingAndThen(
Collectors.groupingBy(
MonitoredData::getActivity,
HashMap::new,
Collectors.summingLong(MonitoredData::getDuration)),
m -> { m.values().removeIf(v -> v < TEN_HOURS_MS); return m; } ));
这里我使用collectors.collectingandthen
修改collectors.groupingby
返回的映射。而且,在finisher函数中,我使用了collection.removeif
,它接受一个谓词并删除与该谓词匹配的所有条目。
有没有办法把这两条流合并成一条?我使用第一个流在嵌套列表中进行过滤和查找,并使用第二个流根据流的结果创建地图。我想知道是否有一种方法可以用一条流来实现这一点。 像这样的
将此流收集到列表中 正如我所看到的,infinity循环有一些问题,所以peek()打印范围内的数字(12,99),这是可以的,但之后它再次打印范围内的数字(11,98),等等,你能解释一下我在哪里犯了错误吗?
过滤器作为读写操作的流内容传输过程中的附加阶段. 要注意的是直到php 4.3中才加入了流过滤器, 在php 5.0对流过滤器的API设计做过较大的调整. 本章的内容遵循的是php 5的流过滤器规范. 在流上应用已有的过滤器 在一个打开的流上应用一个已有的过滤器只需要几行代码即可: php_stream *php_sample6_fopen_read_ucase(const char *path
我有两个简单的POJOs: 然后我生成一些数据,我为父母添加100个孩子: 我的目标是移除所有10岁以下的儿童: 最后,我列出了十岁以上的孩子。但是我不想写一个单独的方法。 如何得到所有的父母与名单上的孩子十岁以上只使用单一流?
19 比特流滤镜 默认编译时所有的比特流滤镜都被支持,你可以在配置脚本中以--list-bsfs获取有效的滤镜列表 可以利用--disable-bsfs禁用所有的比特流滤镜。要指定个别的滤镜可用,则在此基础上--enable-bsf=BSF,或者在默认(没有指定--disable-bsfs)下禁用个别的滤镜--disable-bsf=BSF,这里BSF是个别滤镜名称。 在ff*工具集中,-bsfs
主要内容:1.概述,2.ClassLoaderFilter1.概述 在 ProtocolFilterWrapper 中,在服务引用和暴露时,#buildInvokerChain(invoker, key, group) 方法中,基于 Dubbo SPI Active 机制,加载匹配对应的过滤器数组,创建带有过滤器链的 Invoker 对象。代码如下: 2.ClassLoaderFilter 实现 Filter 接口,类加载器切换过滤器实现类。代码如下: