【问题标题】:Iterating over list of strings to see if particular string is present in all strings in the list (Java/Groovy)遍历字符串列表以查看列表中的所有字符串中是否存在特定字符串(Java/Groovy)
【发布时间】:2018-01-15 22:35:00
【问题描述】:

我有一个字符串列表(我从另一种方法获得的)并且想要验证某个字符串是否存在于所有字符串中。即如果列表是 ["My name is Lindsey", "My name is Billy, "My name is John"] 并且我正在测试“name”是否存在于所有字符串中,则该方法应该返回 true。但是如果列表是 ["My name is Lindsey", "My name is Billy, "I'm John"],该方法应该返回 false,因为 "name" 不在最后一个字符串中。 (我对编程真的很陌生,如果我没有使用正确的术语/符号,我深表歉意)。无论如何,这是我目前拥有的:

def verifyEachSuggestionContainsValueOf(String value) {
        List<String> customerMessageSuggestions = customerMessageAutoSuggestions()
        boolean stringPresent = false
        for (String suggestion : customerMessageSuggestions) {
            if (suggestion.contains(value)) {
                stringPresent = true
            }else{
                return false
            }
        }
        return stringPresent
    }

这行得通,但我觉得必须有一种更清洁的方式来做到这一点。任何建议将不胜感激。谢谢!

***已编辑以修复在 For 循环中返回 stringPresent 的问题。

【问题讨论】:

  • 请注意,您的代码不正确。 return 应该在 for 循环之外。
  • 你是对的,谢谢!

标签: java loops groovy


【解决方案1】:

在纯 Java 中:

return list.stream().allMatch(s -> s.contains("name"));

在 Groovy 中:

return list.every { it.contains("name") }

【讨论】:

  • 这不会返回一个列表吗?我只想要一个真/假的回应。
  • 这两个都返回布尔值。阅读 javadoc。第一个选项允许并行评估列表(如果从性能角度来看这样做有意义的话)。
【解决方案2】:
def verifyEachSuggestionContainsValueOf(String value) {
    List<String> customerMessageSuggestions = 
        customerMessageAutoSuggestions()
    for (String suggestion : customerMessageSuggestions) {
        if (!suggestion.contains(value)) {
            return false
    }
    return true
}

布尔变量的声明是不必要的。如果任何字符串不包含所需的子字符串,该方法可以立即返回 false 并退出该方法。否则,它返回 true。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 2023-01-25
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多