デリカ:
のは、私のような要素を持つリストを1つ持っているとしましょう:
List<String> endings= Arrays.asList("AAA", "BBB", "CCC", "DDD");
そして私は、私は上記のリストから文字列のいずれかで終わるすべての要素を選択することになるから、文字列の別の大規模なリストを持っています。
List<String> fullList= Arrays.asList("111.AAA", "222.AAA", "111.BBB", "222.BBB", "111.CCC", "222.CCC", "111.DDD", "222.DDD");
それは四つのグループ、最初のリストから文字列のいずれかで終わる要素のみを含む各グループを含むように理想的には私は2番目のリストを分割する方法がよいでしょう。上記の場合のように、結果は2つの要素それぞれの4つの群であろう。
私はこの例を見つけましたが、私はまだ、私は別のリストに含まれている全てのエンディングでフィルタリングすることができる部分が欠落しています。
Map<Boolean, List<String>> grouped = fullList.stream().collect(Collectors.partitioningBy((String e) -> !e.endsWith("AAA")));
UPDATE:MC皇帝の回答が作業を行いますが、それはそう、実際にうまくそれを動作しない、文字列の何百万人を含むリストにクラッシュします。
エリトリア:
あなたの場合はfullList
、あなたの中に存在していないサフィックスを持ついくつかの要素を持っているendings
あなたのような何かを試すことができます:
List<String> endings= Arrays.asList("AAA", "BBB", "CCC", "DDD");
List<String> fullList= Arrays.asList("111.AAA", "222.AAA", "111.BBB", "222.BBB", "111.CCC", "222.CCC", "111.DDD", "222.DDD", "111.EEE");
Function<String,String> suffix = s -> endings.stream()
.filter(e -> s.endsWith(e))
.findFirst().orElse("UnknownSuffix");
Map<String,List<String>> grouped = fullList.stream()
.collect(Collectors.groupingBy(suffix));
System.out.println(grouped);