Java 8 の使用
Java 8 では、リストをストリームに変換するだけで、次のように記述できます。
import java.util.List;
import java.util.stream.Collectors;
List<Sample> list = new ArrayList<Sample>();
List<Sample> result = list.stream()
.filter(a -> Objects.equals(a.value3, "three"))
.collect(Collectors.toList());
ご了承ください
a -> Objects.equals(a.value3, "three")
ラムダ式です
result
タイプをList
持つSample
- それは非常に高速で、反復ごとにキャストする必要はありません
- フィルター ロジックが重くなる場合は、
list.parallelStream()
代わりにlist.stream()
( read this )を実行できます。
アパッチ・コモンズ
Java 8 を使用できない場合は、Apache Commonsライブラリを使用して次のように記述できます。
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.Predicate;
Collection result = CollectionUtils.select(list, new Predicate() {
public boolean evaluate(Object a) {
return Objects.equals(((Sample) a).value3, "three");
}
});
// If you need the results as a typed array:
Sample[] resultTyped = (Sample[]) result.toArray(new Sample[result.size()]);
ご了承ください:
- 各反復でから
Object
へのキャストがありますSample
- 結果を として入力する必要がある場合は
Sample[]
、追加のコードが必要です (私のサンプルに示されているように)
おまけ:リスト内の要素を見つける方法について説明している素敵なブログ記事。