Guava - 如何从列表中删除,基于谓词,跟踪删除的内容? [英] Guava - How to remove from a list, based on a predicate, keeping track of what was removed?

查看:116
本文介绍了Guava - 如何从列表中删除,基于谓词,跟踪删除的内容?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个要过滤的 ArrayList ,以及各种Guava Predicate 来过滤它。这个列表只有50-100个元素。

I have an ArrayList to be filtered, and various Guava Predicates to filter it with. This list will have only 50-100 elements.

我计划使用每个谓词 Iterables.removeIf 。这可能不是最有效率,但不介意(至少 removeIf 对RandomAccess列表有一些优化)

I was planning on Iterables.removeIf using each predicate in turn. It is perhaps not maximally efficient but never mind (at least removeIf has some optimization for RandomAccess lists)

,我想简洁地记录每个谓词的作用。例如

For debugging, I want to concisely log what each predicate did. e.g.

Pred0 removed [a, c, g]
Pred1 removed []
Pred2 removed [b, f]

有一些明显的黑客解决方案,但你建议什么是最干净的?

There are some obvious hack solutions but what would you suggest as the cleanest?

对于奖励积分,它应该是相当有效率。 ;)

For bonus points, it should be reasonably efficient too. ;)

推荐答案

我会捕获您的谓词代码中删除的元素。

I would capture the removed elements in your Predicate code.

List<String> removedElements = Lists.newArrayList();
final Iterables.removeIf(list, new Predicate<String>() {
    @Override
    public boolean apply(String input) {
        if ("a".equals(input)) {
            removedElements.add(input);
            return true;
        }
        return false;
    }
}); 

这篇关于Guava - 如何从列表中删除,基于谓词,跟踪删除的内容?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆