Collections Java8-通过索引获取,但类似于';getOrDefault';地图?

Collections Java8-通过索引获取,但类似于';getOrDefault';地图?,collections,java-8,optional,Collections,Java 8,Optional,是否有一种更清晰的方法来检查特定索引(如list.getOrDefault(索引,“defaultValue”))中是否存在值。甚至在特定索引超出列表范围时执行默认操作 执行此操作的正常方法是在尝试此操作之前检查列表的大小。默认界面没有此功能。有Iterables。进入: 返回iterable中指定位置的元素,或 defaultValue如果iterable包含的元素少于position+1 如果位置为负值,则抛出索引自动边界异常 如果这是您打算大量使用的功能,并且无法依赖第三方库,那么您可以编

是否有一种更清晰的方法来检查特定索引(如
list.getOrDefault(索引,“defaultValue”)
)中是否存在值。甚至在特定索引超出列表范围时执行默认操作

执行此操作的正常方法是在尝试此操作之前检查列表的大小。

默认界面没有此功能。有
Iterables。进入:

返回
iterable
中指定位置的元素,或
defaultValue
如果
iterable
包含的元素少于
position+1

如果
位置
为负值,则抛出
索引自动边界异常

如果这是您打算大量使用的功能,并且无法依赖第三方库,那么您可以编写自己的静态方法(这里受Guava类的启发):

公共类列表{
公共静态E getOrDefault(int索引、E defaultValue、列表){
如果(指数<0){
抛出新的IllegalArgumentException(“索引小于0:+index”);
}

返回索引如果您在列表的javadoc中没有找到它,那么就没有了。对不起,这不是完全正确的…虽然我(仍然)在Commons集合中找不到合适的方法,但在Guava中有一个方法可以达到这个目的。它被称为
Iterables.get(iterable, position, defaultValue);
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;
  }

}