【发布时间】:2017-01-12 07:46:22
【问题描述】:
是否有一种更简洁的方法来检查某个值是否存在于特定索引中,例如list.getOrDefault(index, "defaultValue")。甚至在特定索引超出列表范围时执行默认操作。
执行此操作的正常方法是在尝试此操作之前检查列表的大小。
【问题讨论】:
-
如果在List的javadoc中没有找到,那就没有了。
标签: collections java-8 optional
是否有一种更简洁的方法来检查某个值是否存在于特定索引中,例如list.getOrDefault(index, "defaultValue")。甚至在特定索引超出列表范围时执行默认操作。
执行此操作的正常方法是在尝试此操作之前检查列表的大小。
【问题讨论】:
标签: collections java-8 optional
默认的List 接口没有这个功能。 Guava中有Iterables.get:
Iterables.get(iterable, position, defaultValue);
返回
iterable中指定位置的元素或defaultValue如果iterable包含的元素少于position + 1。如果
position为负,则抛出IndexOutOfBoundsException。
如果这是您打算大量使用并且无法依赖第三方库的功能,您可以编写自己的静态方法(此处受 Guava Lists 类的启发):
public class Lists {
public static <E> E getOrDefault(int index, E defaultValue, List<E> list) {
if (index < 0) {
throw new IllegalArgumentException("index is less than 0: " + index);
}
return index <= list.size() - 1 ? list.get(index) : defaultValue;
}
}
【讨论】: