例如,我正在尝试做这样的事情:
Arrays.asList(Serial.list()).indexOf("/dev/tty.usbmodem*");
这可能吗?或者完成此任务的正确方法是什么。如果它按预期返回匹配的第一个元素就可以了。我想如果有一种方法,例如某种返回符合条件的新字符串数组的 grep 方法,那也可以。
我会使用循环
for(String s : list() )
if(s.startsWith("start to look for "))
return s;
javadocindexOf(Object)
声明方法返回
此列表中指定元素第一次出现的索引,如果此列表不包含该元素,则为 -1
所以不,你不能那样做。
我假设您正在尝试List<String>
使用List
. 你想做什么工作List<Integer>
?
您必须进行自己的迭代和模式匹配。
正如其他解决方案指出的那样,您可以简单地遍历列表,因为内置indexOf
不会这样做。Java 提供的(而且它很容易实现)本来很好的一个版本,indexOf
它接受一个谓词并返回列表中满足谓词的第一个元素。正如我所说,这很容易在实用程序类中实现。这是一个简单的版本:
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
public class StringUtil {
interface Predicate<T> {
boolean test( T object );
}
public static <T> int indexOf( final List<T> list, final Predicate<T> predicate ) {
final Iterator<T> it = list.iterator();
for ( int i = 0; it.hasNext(); i++ ) {
if ( predicate.test( it.next() )) {
return i;
}
}
return -1;
}
public static void main( String[] args ) {
final List<String> list = Arrays.asList( "foo", "bar", "baz" );
// Find the index of the first string that starts with "ba".
final int index = indexOf( list, new Predicate<String>() {
public boolean test( final String string ) {
return string.startsWith( "ba" );
}
});
// It's 1 (for "bar").
System.out.println( index );
}
}