java/guava - 从 iterable 中收集删除的元素

标签 java guava

<分区>

Guava 有没有更优雅的方式从集合中移除满足某个谓词的项,并同时收集这些移除的项?有关示例,请参见下面的代码。

public static void main(String[] a) {
    final List<String> list = new LinkedList<String>();

    list.add("...");
    ...

    final List<String> removedItems = new LinkedList<String>();

    Iterables.removeIf(list, new Predicate<String>() {
        public boolean apply(final String o) {
            if (...) { // some condition
                removedItems.add(o);
                return true;
            }
            return false;
        }
    });

    System.out.println(removedItems);
}

谢谢!

编辑:我的问题不是关于对列表进行分区,而是关于从集合中删除元素并同时收集它们。我编辑了我的问题以避免混淆。

最佳答案

Predicate<Integer> predicate = new Predicate<>() {
    public boolean apply(final Integer o) {
        return o <= 5;
    }
};

List<Integer> removed = Lists.newLinkedList(Iterables.filter(list, predicate));
Iterables.removeIf(list, predicate);

关于java/guava - 从 iterable 中收集删除的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25270073/

相关文章:

java - 如何使用 JPA 和 Hibernate 映射 PostgreSQL 枚举

java - 使用 Guava 对集合进行缓存过滤器

java - 如何从另一个类打印变量

java - AtomicBoolean.set(flag) 和 AtomicBoolean.compareAndSet(!flag, flag) 有什么区别?

Android:无法在 Google Guava 的 ImmutableSortedSet 中调用 SortedSet 方法

java - 为什么 Predicates.instanceOf 返回 false?

guava - 为什么 Guava 中的 Iterables.find() 会抛出 NoSuchElementException,而不是返回 null?

java - 使用 Google Collection MapMaker?

java - Java Swing 应用程序中的文本文档编辑器

java - 解析大型 XML 文件并动态生成 SQL 表