Java8 - 按索引获取但类似于 Map 的“getOrDefault”?

Fra*_*rds 5 collections optional java-8

是否有更简洁的方法来检查值是否存在于特定索引处,例如list.getOrDefault(index, "defaultValue"). 或者甚至在特定索引超出列表范围时执行默认操作。

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

Mag*_*lex 6

默认List界面没有这个功能。有Iterables.get番石榴

Iterables.get(iterable, position, defaultValue);
Run Code Online (Sandbox Code Playgroud)

返回元件在指定位置iterabledefaultValue如果iterable包含不是较少position + 1的元件。

IndexOutOfBoundsException如果position为负则抛出。

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

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;
  }

}
Run Code Online (Sandbox Code Playgroud)

  • 可以使用流:list.stream().skip(&lt;index&gt;).findFirst().orElse(&lt;default value&gt;) (5认同)