选择集合中的第一个索引

时间:2011-10-27 20:24:17

标签: java

我觉得有时候我正在重新发明轮子。

我想知道java / jakarta commons / guava /?中是否有任何实用程序方法,这将更深入地进行集合并使用元素执行某些操作(测试,修改,删除)。

我写了这个方法,现在我觉得有一些单行可以做到。

/**
 * Find index of first line that contains search string.
 */
public static int findIdx(List<String> list, String search) {
  for (int i = 0, n = list.size(); i < n; i++)
    if (list.get(i).contains(search))
      return i;
  return -1;
}

2 个答案:

答案 0 :(得分:5)

Guava的Iterables.indexOf带有谓词:

int index = Iterables.indexOf(list, new Predicate<String> {
        @Override public boolean apply(String input) {
            return input.contains(search);
        }
    });

不可否认,并不是更好 - 而且你需要让search最终成功。但至少在Java 8中你可以编写类似的东西:

int index = Iterables.indexOf(list, input => input.contains(search));

(或者至少喜欢那些。可能在扩展方法语法中......)

答案 1 :(得分:2)

Guava在Iterables.indexOf()中有你想要的东西,虽然我不认为它会让你的代码更具可读性:

public static int findIdx(List<String> list, final String search) {
  return Iterables.<String> indexOf(list, new Predicate<String>() {
    public boolean apply(String s) {
      return s.contains(search);
    }
  });
}