找出Java 8流过滤器是否已过滤某些内容的优雅方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了找出Java 8流过滤器是否已过滤某些内容的优雅方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1137字,纯文字阅读大概需要2分钟。
内容图文
![找出Java 8流过滤器是否已过滤某些内容的优雅方法](/upload/InfoBanner/zyjiaocheng/805/49db31498ba94e7eb41e48ed1f5a0939.jpg)
我有一个从数据库中获取的项目列表.
我做的事情如下:
List<Item> list;
list.stream()
.filter( i -> i.condition() )
.mapToLong( Item::asLong )
.sum()
;
现在我想知道,如果过滤器已经过滤掉了某些内容,那么我可以从我的数据库中删除它,不再需要它.
我可以:
List<Item> list2 = list.stream()
.filter( i -> i.condition() )
.collect( Collectors.toList() )
;
int theSizeIWant = list2.size();
list2.stream().mapToLong( Item::asLong )
.sum()
;
但我想知道是否有一个更优雅的解决方案,不需要创建中间列表.
解决方法:
一种可能的解决方案是使用谓词对Stream进行分区并对值求和.使用partitioningBy(predicate, downstream)完成分区.在这种情况下,谓词将是您的过滤函数,下游收集器将是summingLong以对值进行求和.
public static void main(String[] args) {
List<Item> list = new ArrayList<>();
Map<Boolean, Long> map =
list.stream()
.collect(Collectors.partitioningBy(
Item::condition,
Collectors.summingLong(Item::asLong)
));
long sumWithTrueCondition = map.get(true);
long sumWithFalseCondition = map.get(false);
}
映射将包含谓词为真的总和(resp.false)和true键(resp.false).
这样,如果已经过滤了某些东西,sumWithTrueCondition将严格大于0.此外,您可以通过添加sumWithTrueCondition和sumWithFalseCondition来获得总和.
内容总结
以上是互联网集市为您收集整理的找出Java 8流过滤器是否已过滤某些内容的优雅方法全部内容,希望文章能够帮你解决找出Java 8流过滤器是否已过滤某些内容的优雅方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。