【发布时间】:2020-03-18 07:58:35
【问题描述】:
//FullName(String name, String fullName)
List<FullName> fullNameList = Arrays.asList(
new FullName("Alpha", "Alpha Maz"),
new FullName("Beta", "Beta Sew"),
new FullName("Delta", "Delta Non"),
new FullName("Indigo", "Indigo Loe")
);
List<String> nameList = Arrays.asList(new String[] {"Delta","Alpha"});
让我们以上面的示例列表为例。 我想将 nameList 与 fullNameList 进行比较,如果找到任何匹配项,则返回全名。
我必须使用 nameList 作为主要,因为我希望结果遵循 nameList 中的序列,我不知道如何从比较列表 (fullNameList) 中“收集”元素
String result= nameList.stream()
.filter(v -> fullNameList.stream().anyMatch(s -> s.getName().equals(v)))
.collect(Collectors.joining(","));
Actual Result : "Delta,Alpha"
Expected Result : "Delta Non,Alpha Maz"
知道如何使用 Java 8 Stream 做到这一点吗?
【问题讨论】:
-
澄清 - 如果 namesList 中的名字与 fullName 列表中的名字匹配,您想将完整名称提取到另一个列表中吗?
-
是的,这就是我想要的结果。
-
如果输出的顺序无关紧要,您可以将名称存储为
Set,然后在遍历fullNameList时,过滤相关名称并映射以进一步执行连接。
标签: java java-stream