我想從一個集合中取出一個項目,並根據謂詞保留它。它確實似乎應該是可能的,但我無法找到一種方法來防止兩次通過列表。這種操作可用於基於動態優先級「彈出」對象。什麼是從一組中抽取對象的Java 8方法?
也許我應該堅持一個迭代器。
下面是一個例子:
import org.junit.Test;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class RemoveAndUse {
class A {
int x;
A(int x) { this.x = x;}
}
class B {
int y;
B(int y) { this.y = y;}
}
@Test
public void removeHappyPath() {
Set<A> aList = new HashSet<>(Arrays.asList(new A(1), new A(2), new A(3)));
B b = new B(2);
// remove and keep an A that matches b
A found = aList.stream()
.filter(a -> a.x == b.y)
.findAny().get();
aList.removeIf(a -> a.x == b.y);
// or: aList.remove(found);
assert(!aList.contains(found));
assert(found.x == b.y);
}
}
任何其他的想法?
如果你有一個正確的hashcode/equals實現,remove通過'HashSet'獲取常量時間,所以調用'aList.remove(found)'很好。 –