【问题标题】:Java boolean "Unexpected return value"Java布尔“意外的返回值”
【发布时间】:2022-01-10 08:00:21
【问题描述】:

我是 Java 新手,我不明白为什么 IDE 在 forEach 中说“意外的返回值”,我通过 If 语句声明布尔值是真还是假。 我的目标是检查“States”HashMap 中是否有一个对象已经使用了我想要设置为新状态的名称。 (HashMap 的键是一个名为 IdentifierOfState 的字符串,值是我的 State 对象,其中包含其名称等变量。)提前感谢您的帮助!

public boolean isStateNameClaimed(String NameOfState)
{
    States.forEach((IdentifierOfState, ValueOfState) ->
    {
        if (ValueOfState.getNameOfState().equalsIgnoreCase(NameOfState)) {return true;}
        else {return false;}
    });
    return false;
}

【问题讨论】:

    标签: java if-statement foreach hashmap return


    【解决方案1】:

    问题是您试图在错误的位置返回结果。 {return true;}{return true;} 在 lambda 中,因此它们试图为 lambda 返回一个结果。但是该 lambda 的推断类型签名不允许返回任何值。

    如果您的意图是那些 return 语句应该返回来自 isStateNameClaimed 的结果,那么更好的解决方案是只使用 for 循环来迭代 States 的元素。


    如果您的 Java 代码包含许多严重的 Java 样式违规,这无济于事。您不应该以大写字母开头的变量名称。它会混淆......然后惹恼......其他阅读您的代码的人。

    你可能会说:“不,我不需要遵守规则,因为没有其他人会阅读我的代码”。但是您要求 >>我们

    我是 Java 新手...

    ...所以现在是学习正确操作的时候了。 Java 风格对阅读您的代码的人很重要。


    这就是我用经典 Java 编写它的方式:

    public boolean isStateNameClaimed(String name) {
        for (State v: states.values()) {
            if (v.getNameOfState().equalsIgnoreCase(name)) {
                return true;
            } else {
                return false;
            }
        }
        return false;
    }
    

    或者使用流:

    public boolean isStateNameClaimed(String name) {
        return states.values().stream().anyMatch(
            (v) -> v.getNameOfState().equalsIgnoreCase(name));
    }
    

    实际上...我只是注意到这两种解决方案并不等效。根据您对您正在尝试做的事情的描述,这可能意味着第一个和您最初的尝试在算法上是不正确的。

    【讨论】:

    • 谢谢,我认为问题在于编译器会认为返回的是 lambda 而不是布尔值,但我不确定。另外,感谢您提到样式,我已经使用 C# 编程多年,但我还没有习惯 Java 样式,但我会努力使其代码清晰!
    【解决方案2】:

    forEach 将为每个元素调用一个给定的可调用函数。我们不能有返回值给那个函数。

    尝试使用“过滤器”或将结果分配给局部变量。

    Return from lambda forEach() in java

    【讨论】:

      猜你喜欢
      • 2019-08-08
      • 2015-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-18
      • 2018-01-24
      • 2013-03-28
      相关资源
      最近更新 更多