【发布时间】:2015-02-20 08:53:24
【问题描述】:
我有一个 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();
但这看起来很丑陋,而且可能效率不高。
我在其他语言中看到的所有不可变集合通常都提供了一种执行可变操作的方法,即返回新实例。番石榴有这个功能吗?
【问题讨论】:
-
你不能改变它,所以它叫Immutable
-
不可变集合可能允许更改其内容,返回具有新内容的新对象。例如,查看 Scala 不可变集合。但是 Guava 没有这个功能,可能是因为 ImmutableXXX 集合的构建目的不同。
标签: java collections guava immutability