Java 从map调用中消除if逻辑

Java 从map调用中消除if逻辑,java,if-statement,vavr,Java,If Statement,Vavr,我经常在基于vavr的代码中看到: ... .map(x -> { if (someCondition(x)) { return doWith(x); } else { return x; } }) ... 是否有任何方法可以使用某些构造从map调用中消除此逻辑?我发现这if条件很尴尬。使用三元条件表达式可能看起来更好: .map(x -> someCondition(x) ? doWith(x) : x) 如果条件不包含任何逻辑或很少逻辑

我经常在基于vavr的代码中看到:

...
.map(x -> {
   if (someCondition(x)) {
      return doWith(x);
   } else {
     return x;
   }
})
...

是否有任何方法可以使用某些构造从
map
调用中消除此逻辑?我发现这
if
条件很尴尬。

使用三元条件表达式可能看起来更好:

.map(x -> someCondition(x) ? doWith(x) : x)

如果条件不包含任何逻辑或很少逻辑,则使用三元运算符

.map(x -> someCondition(x) ? doWith(x) : x)
或者在方法中提取映射中的逻辑

.map(ClassName::myXTreatmentMethod)
// or
.map(this::myXTreatmentMethod)
使用
myXTreatmentMethod

public X_Type myXTreatmentMethod(X_Type x) {
    if (someCondition(x)) {
        // some logic
        return doWith(x);
    }
    return x;
}

我的想法是用可选的

   .map(x -> Optional.ofNullable(x)
            .filter(this::someCondition)
            .map(this::doWith)
            .orElse(x))

这将返回
可选
,因此您需要在其他地方正确处理它

那么
大小写匹配如何
如下所示:

Iterator.range(0, 10)
        .map(index -> Match(index).of(
            Case($(n -> n % 2 == 0), "even"),
            Case($(), "odd")
        ))

事实上,这并没有改变什么。它是否是
if
语句的三元组并不重要。但是谢谢你的想法。@Opal它减少了代码的长度。它消除了使用大括号和返回语句的需要。因此,我想说,如果使用
if
,它就不会那么尴尬了。是的,我看到了,但是这不是我想要的。我要找的是一些我不知道的vavr或功能结构。然而;)我想要的是一个概念,而你建议的只是语法。@Opal我想你希望有一个流方法,比如
mapIf(谓词,函数)
,但它并不存在。虽然这样做有效,但这是过火了,更重要的是,它没有这个意图。您的代码很难理解您想要有条件地转换元素。三元运算符或if-else语句更具表现力。当然,对于某些人来说,这可能是一种过激的行为,但这只是我/另一种替换if语句的方法