假设我有一个包含以下元素的列表:
List<String> endings= Arrays.asList("AAA", "BBB", "CCC", "DDD");
Run Code Online (Sandbox Code Playgroud)
我还有一个很大的字符串列表,从中我想从上面的列表中选择所有以任何字符串结尾的元素。
List<String> fullList= Arrays.asList("111.AAA", "222.AAA", "111.BBB", "222.BBB", "111.CCC", "222.CCC", "111.DDD", "222.DDD");
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想对第二个列表进行分区,以使其包含四个组,每个组仅包含那些以第一个列表中的一个字符串结尾的元素。因此,在上述情况下,结果将是4组,每组2个元素。
我找到了这个示例,但是我仍然缺少可以过滤包含在不同列表中的所有结尾的部分。
Map<Boolean, List<String>> grouped = fullList.stream().collect(Collectors.partitioningBy((String e) -> !e.endsWith("AAA")));
Run Code Online (Sandbox Code Playgroud)
更新:MC Emperor的答案确实有效,但是它在包含数百万个字符串的列表上崩溃,因此在实践中效果不佳。