0

例如,我正在尝试做这样的事情:

Arrays.asList(Serial.list()).indexOf("/dev/tty.usbmodem*");

这可能吗?或者完成此任务的正确方法是什么。如果它按预期返回匹配的第一个元素就可以了。我想如果有一种方法,例如某种返回符合条件的新字符串数组的 grep 方法,那也可以。

4

3 回答 3

3

我会使用循环

for(String s : list() )
     if(s.startsWith("start to look for "))
           return s;
于 2013-09-26T18:31:22.353 回答
0

javadocindexOf(Object)声明方法返回

此列表中指定元素第一次出现的索引,如果此列表不包含该元素,则为 -1

所以不,你不能那样做。

我假设您正在尝试List<String>使用List. 你想做什么工作List<Integer>

您必须进行自己的迭代和模式匹配。

于 2013-09-26T18:29:53.533 回答
0

正如其他解决方案指出的那样,您可以简单地遍历列表,因为内置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 );
    }
}
于 2013-09-26T18:51:49.357 回答