職場で現状調査のためソースを眺めていましたが、たまたま2重ループでリスト同士をマッチングするコードがありました。
マッチングの仕様はソースを見た限り
‐文字列が格納されているList AとList Bがある
-List Aの文字列がList Bの文字列の先頭から一致しているものが一つでもあればtrueを返す
というものでした。
実装方式は古典的な2重ループでList同士をひとつづつ比較するものでしたが、Stream関数を使ってもっと簡素に記述できるのではないか?と疑問が湧いたので、stream関数を使って実装してみました
MyListSearcher.java
package test;
import java.util.Arrays;
import java.util.List;
public class MyListSearcher {
public static void main(String args[]){
List <String> target =Arrays.asList("triple","evergreen");
List <String> matcher =Arrays.asList("triple,ok","evergreen,ng","aria,ok");
System.out.println(String.format("実行結果: %b", exe(target,matcher)));
//実行結果: true
target =Arrays.asList("triple_1","evergreen");
matcher =Arrays.asList("triple,ok","evergreen,ng","aria,ok");
System.out.println(String.format("実行結果: %b", exe(target,matcher)));
//実行結果: true
target =Arrays.asList("triple_1","evergreen_2");
matcher =Arrays.asList("triple,ok","evergreen,ng","aria,ok");
System.out.println(String.format("実行結果: %b", exe(target,matcher)));
//実行結果: false
}
private static boolean exe(List<String>target,List<String>matcher){
return target.stream().anyMatch(a->matcher.stream().anyMatch(b->b.startsWith(a)));
}
}