例として、私は次のようなことをしようとしています:
Arrays.asList(Serial.list()).indexOf("/dev/tty.usbmodem*");
これは可能ですか?または、これを達成するための適切な方法は何ですか。想定どおり、match の最初の要素を返せば問題ありません。条件に一致した文字列の新しい配列を返すある種の grep メソッドなどのメソッドがあれば、それも問題ないと思います。
ループを使用します
for(String s : list() )
if(s.startsWith("start to look for "))
return s;
indexOf(Object)
javadocには、メソッドが返すと記載されています
このリストで指定された要素が最初に出現するインデックス、またはこのリストに要素が含まれていない場合は -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 );
}
}