当前位置: 首页 > 知识库问答 >
问题:

如何用Optionals替换我的旧Java代码?

韩寒
2023-03-14

我有这个密码:

existMusic.isPresent(music -> {
if (music.getAuthor() == null && music.getType() == Type.POP){
methode1();
}else if (music.getAuthor() == Author.USA && music.getType() == Type.RAP){
methode2()
} else {
throw exception;

还有很多if语句。我想用可选的替换它,但我不知道如何替换,因为我只是在研究这个主题。你能帮我吗?

共有1个答案

梁俊智
2023-03-14

我不认为代码的可读性会因为不使用选项而受到影响,而是因为你实现了你的如果。我会分两步重构它:

第一:重新排列ifs并减少嵌套ifs

Optional<Class1> existingClass1 = class1Service.get(class2.getNumber());

existingClass1.ifPresent(class1 -> {
    if (Enum.PARAM1 == class1.getParam1() && Enum.PARAM3 == class1.getParam2()){
        class1.setParam1(Enum.PARAM2);
        class1.setParam2(null);
        class2.setClass1(class1);
    } else if (class1.getParam1() == null && Enum.PARAM2 == class1.getParam2() 
        && (class1.getList() == null || class1.getList().size() != 2)){
        class2.setClass1(class1);
    } else {
        throw new Exception();
    } 
});

第二:移动一些只涉及Class1到Class1源代码的条件检查

public Class1 {

    ...

    public boolean isConditionOne() {
        return Enum.PARAM1 == this.getParam1() && Enum.PARAM3 == this.getParam2()
    }
    
    public boolean isConditionTwo() {
        return this.getParam1() == null && Enum.PARAM2 == this.getParam2() 
        && (this.getList() == null || this.getList().size() != 2)
    }

}

所以你的另一个类看起来像这样:

Optional<Class1> existingClass1 = class1Service.get(class2.getNumber());

existingClass1.ifPresent(class1 -> {
    if (class1.isConditionOne()){
        class1.setParam1(Enum.PARAM2);
        class1.setParam2(null);
        class2.setClass1(class1);
    } else if (classOne.isConditionTwo()){
        class2.setClass1(class1);
    } else {
        throw new Exception();
    } 
});
 类似资料:
  • 我在运行我的项目时面临着这个问题。情况是,我有一个按钮,让我打印表中的输出。但是,每次单击按钮时,表都是追加的,而不是替换旧值。对于jtextarea,我使用了一种简单的方法来解决它,即使用而不是使用。这就是我如何将值传递到表我将row声明为vector。谁能告诉我如何让它替换值而不是追加。

  • 我希望输出保持xml元素数据中的空格不变,如下所示:

  • 问题内容: 我有一个名为表,其中有一个名为列,并充满了相同的数字的,等等。 我生成了一个列表,其中包含新的商品编号,它将替换旧的商品编号: 我有一个查询,希望可以解决该查询,但是以某种方式它什么也没做。 (当然,我已将其他值嵌套到查询中) 我如何在这样的列中获取将旧值替换为新值的查询? 问题答案: 您只是在选择新替换的值,而不对它们进行任何操作…在使用replace时,这是一个很好的主意,请始终先

  • 问题内容: 我试图将字符串分成数组并替换为,但无法做到,我也尝试了String.replaceAll这样的东西。 我想提供一个通往JNI的路径,并且它只能以这种方式读取。 问题答案: 在这种情况下不要使用- 这是用正则表达式指定的,这意味着您需要更多的转义。这应该很好: 请注意,由于Java字符串文字中的原因,反斜杠加倍-因此此处涉及的 实际 字符串是“单反斜杠”和“双反斜杠”-而不是双倍和四倍。

  • 问题内容: 我正在使用 EclipseLink的JAXB实现的一些非标准扩展,并且要启用该实现,必须使用jaxb.properties对其进行配置。效果很好。 但是,由于生成错误,属性文件未包含在正确的位置,从而导致使用默认的JAXB,该文件没有任何错误,只是继续解析XML文件,忽略了非标准扩展名,给我留下了一个非工作bean。 为了使它更加健壮,我想摆脱属性文件,并在代码中指定上下文配置。由于它

  • 例如,我有这样的代码 如何将“\on the”替换为replace eAll()?