gpt4 book ai didi

java - 如何知道哪个元素在 java-8 anymatch 中匹配?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:46:42 25 4
gpt4 key购买 nike

假设我有一个枚举

enum Country {
China,
USA,
Others
}

假设我有一个list1 = ["China", "Shanghai", "Beijing"] 并检查 isChina,如果为真,则返回 Country.China。

list2 = ["USA", "Dallas", "Seattle"] 和一个检查 isUSA 的方法,如果为真则返回 Country.USA。

如果列表中缺少 USA 或 China,则返回 Country.Others。

假设:一个列表总是只包含 1 个国家,后面是该国家的城市。

[编辑] 不要假设,国家/地区将是数组中的第一个元素。

虽然我发现在 Java-7 中实现它非常容易,但我不确定使用流来实现这一点的最优雅方式

for (String str: list) {
if (str.equals("China")) {
return Country.China
}
if (str.equals("USA")) {
return Country.USA;
}
}
return Country.Other;

我正在寻找使用 Streams 的干净实现。

最佳答案

对条件使用filter操作,findFirst得到第一个匹配项,然后转换为相应的Country.ChinaCountry.USA 如果不匹配则返回 Country.Others

 return list.stream()
.filter(str -> "China".equals(str) || "USA".equals(str))
.findFirst()
.map(s -> "China".equals(s) ? Country.China : Country.USA)
.orElse(Country.Others);

或者:

return Stream.of(Country.values()) // or Arrays.stream(Country.values())
.filter(o -> list.contains(o.toString()))
.findFirst().orElse(Country.Others);

第一个解决方案将始终在检查“美国”之前检查“中国”,这与您的命令式方法完全相同,但是,后者并不总是遵守该顺序,而是取决于枚举的顺序国家/地区 中的常量声明。

关于java - 如何知道哪个元素在 java-8 anymatch 中匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54083342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com