我一定是错过了一些非常明显的东西,但我已经搜索了所有,不能找到这个方法。
当前回答
Jeffrey Hantin的答案很好,但它有一些限制,如果它是这个做这个或那个…
你可以编写自己的扩展方法,它总是以你想要的方式工作。
Lists.indexOf(array, x -> item == x); // compare in the way you want
这是您的分机号码
public final class Lists {
private Lists() {
}
public static <T> int indexOf(T[] array, Predicate<T> predicate) {
for (int i = 0; i < array.length; i++) {
if (predicate.test(array[i])) return i;
}
return -1;
}
public static <T> int indexOf(List<T> list, Predicate<T> predicate) {
for (int i = 0; i < list.size(); i++) {
if (predicate.test(list.get(i))) return i;
}
return -1;
}
public interface Predicate<T> {
boolean test(T t);
}
}
其他回答
List接口有一个indexOf()方法,您可以使用array的asList()方法从数组中获取List。除此之外,Array本身没有这样的方法。它确实有一个用于排序数组的binarySearch()方法。
我不记得在数组上有一个“indexOf”,除了为自己编写它…如果数组包含基本类型,则可以使用java.util.Arrays#binarySearch(…)方法之一(参见Arrays javadoc)
使用Arrays实用程序类有几种方法可以实现这一点。
如果数组没有排序,也不是基元数组:
java.util.Arrays.asList(theArray).indexOf(o)
如果数组是原语且没有排序,则应该使用由其他答案之一提供的解决方案,如Kerem baydo土耳其的,Andrew McKinlay的或Mishax的。即使theArray是基本的(可能会发出警告),上面的代码也会被编译,但您仍然会得到完全错误的结果。
如果数组是排序的,你可以使用二进制搜索性能:
java.util.Arrays.binarySearch(theArray, o)
数组没有indexOf()方法。
也许这个Apache Commons Lang ArrayUtils方法就是您要找的
import org.apache.commons.lang3.ArrayUtils;
String[] colours = { "Red", "Orange", "Yellow", "Green" };
int indexOfYellow = ArrayUtils.indexOf(colours, "Yellow");
您可能会想到java.util。数组列表,而不是数组。
推荐文章
- 在log4j中,在记录日志之前检查isDebugEnabled是否能提高性能?
- 没有JAXB生成的@XmlRootElement
- 什么时候在数组/数组列表上使用链表?
- Java中对象的内存消耗是多少?
- 获取Spring应用程序背景信息
- 为什么在Java中使用静态嵌套接口?
- @Mock, @MockBean和Mockito.mock()的区别
- JDK 8中的PermGen消除
- 如何将CharSequence转换为字符串?
- 在Java中初始化一个long
- Java的数组indexOf在哪里?
- 同一个键下的多个值
- Java“虚拟机”vs. Python“解释器”的说法?
- 获取操作系统级别的系统信息
- 如何通过SFTP从服务器检索文件?