【问题标题】:Java filter ENUM type values inside the list using streams and returnJava 使用流过滤列表中的 ENUM 类型值并返回
【发布时间】:2023-01-25 17:57:10
【问题描述】:

我有一个电子邮件对象列表,每个对象都包含一个枚举类型状态。我需要按活动和已验证状态过滤列表,并返回电子邮件地址(字符串),否则为空。你能帮我提供使用流的解决方案吗?

List<Email> emails -> enum StatusEnum {  ACTIVE("ACTIVE"),  VERIFIED("VERIFIED") ..}  & emailaddress.  

我的条件是 stat = active && 已验证,并从电子邮件对象列表中返回 testmail@test.com。谢谢。

Json格式的例子:

{
"emails": [
    {
        "stat": [
            "active",
            "verified"
        ],
        "date": "2022-06-03",
        "emailaddress": "testmail@test.com"
    }
]

}

【问题讨论】:

  • 你尝试过什么吗?如果超过 1 个电子邮件匹配,返回所有,只获取其中一个地址,还会发生什么情况?
  • 它总是返回一封电子邮件。我需要这样的东西。字符串电子邮件 = mail.getEmails().stream().filter(obj -> obj.getStatus().containsAll(Arrays.asList("active","verified"))).findAny().orElse(null)
  • 看起来你只是缺少一个映射函数来提取地址,在orElse()-Optional.map()之前。

标签: java java-stream


【解决方案1】:

您可以像这样收集电子邮件列表:

List<String> emailAddress = emails.stream()
            .filter(email -> email.stat.containsAll(List.of(Stat.ACTIVE, Stat.VERIFIED)))
            .map(email -> email.emailaddress)
            .collect(Collectors.toList());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-07
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多