gpt4 book ai didi

java - 如何从 Guava 集合中更改 ImmutableSet?

转载 作者:行者123 更新时间:2023-12-03 20:23:47 26 4
gpt4 key购买 nike

我有一个 ImmutableSet 的实例。现在我需要包含该集合中除一个之外的所有元素的新实例。就像是

ImmutableSet<Integer> numbers = ImmutableSet.of(2, 3, 4, 5);
ImmutableSet<Integer> primeNumbers = numbers.remove(4);

但是这段代码当然甚至不能编译。我能做到的唯一方法是:
ImmutableSet<Integer> numbers = ImmutableSet.of(2, 3, 4, 5);
ImmutableSet.Builder<Integer> primeNumbersBuilder = new ImmutableSet.Builder<>();
for (Integer number : numbers) {
if (number != 4) {
primeNumbersBuilder.add(number);
}
}
ImmutableSet<Integer> primeNumbers = primeNumbersBuilder.build();

但这看起来很丑陋,而且可能没有达到应有的效率。

我在其他语言中看到的所有不可变集合通常都提供了一种执行可变操作、返回新实例的方法。 Guava 有这个功能吗?

最佳答案

工厂方法和 builder()Collection 的唯一补充正如您在 Javadoc 中看到的那样,Guava 中的实现。

另一种更流畅的解决方案是使用 FluentIterable :

ImmutableSet<Integer> primeNumbers = FluentIterable.from(numbers)
.filter(Predicates.not(Predicates.equalTo(4)))
.toSet();

或者,使用静态导入:
ImmutableSet<Integer> primeNumbers = FluentIterable.from(numbers)
.filter(not(equalTo(4)))
.toSet();

关于java - 如何从 Guava 集合中更改 ImmutableSet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27599607/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com