【问题标题】:Java8 - get by index but something similar to 'getOrDefault' for Map?Java8 - 按索引获取,但类似于 Map 的“getOrDefault”?
【发布时间】:2017-01-12 07:46:22
【问题描述】:

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

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

【问题讨论】:

  • 如果在List的javadoc中没有找到,那就没有了。

标签: collections java-8 optional


【解决方案1】:

默认的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;
  }

}

【讨论】:

  • 对不起,但这并不完全正确……虽然我(仍然)在 Commons Collections 中找不到合适的方法,但 Guava 中有一个方法可以达到这个目的。它叫Iterables.get
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 2021-05-09
  • 1970-01-01
  • 2017-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多