找出Java 8流过滤器是否已过滤某些内容的绝佳方法

明显死亡

我有一个从数据库ListItem获取的。

我做类似的事情:

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()
     ;

但我想知道是否有一个不需要创建中间列表的更优雅的解决方案。

Tunaki

一种可能的解决方案是用谓词对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);
}

映射将包含谓词为true(resp。false)和true键(resp。false的总和

这样,如果已将某些内容过滤掉,sumWithTrueCondition则将严格大于0。此外,您可以通过将sumWithTrueCondition相加来获得总和sumWithFalseCondition

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java 8 数组流过滤器

来自分类Dev

Java 8迭代器流过滤器NoSuchElementException

来自分类Dev

通过RX Java或首次获取过滤器索引的绝佳方法

来自分类Dev

如何处理对象不能满足在Java 8流过滤器

来自分类Dev

在Java Lambda流过滤器中外部化谓词

来自分类Dev

流过滤器java中的if-else

来自分类Dev

Java 8 Lambda,过滤器HashMap,无法解析方法

来自分类Dev

带有方法调用的Java 8过滤器

来自分类Dev

Java 8流过滤:IN子句

来自分类Dev

Java 8 LocalDateTime的周末过滤器

来自分类Dev

将谓词或函数用作Java流过滤器有什么区别?

来自分类Dev

为什么不能对Java流过滤器应用谓词?

来自分类Dev

Java 8-使用许多过滤器的过滤器集合

来自分类Dev

是否可以使用Java 8 Streams过滤器访问列表的索引?

来自分类Dev

是否可以用Java编写日志过滤器?

来自分类Dev

是否可以用Java编写日志过滤器?

来自分类Dev

使用isPresent方法在Java8列表过滤器

来自分类Dev

为SortedSet优化的Java 8最大过滤器?

来自分类Dev

Java8流和过滤器

来自分类常见问题

使用Lambda的Java 8过滤器数组

来自分类Dev

java8流-过滤器映射和聚合

来自分类Dev

在Java 8中,如何应用此过滤器?

来自分类Dev

Java 8-映射值内的过滤器列表

来自分类Dev

Java 8 Streams过滤器惰性评估的意图

来自分类Dev

Java 8-流,过滤器和可选

来自分类Dev

使用Java 8谓词JPA库过滤器

来自分类Dev

为SortedSet优化的Java 8最大过滤器?

来自分类Dev

是否可以在收集阶段使用Java 8流过滤/忽略对象?

来自分类Dev

在Java过滤器中获取方法名称