Java Stream 中的三元运算符等效

问题描述 投票:0回答:2

我正在尝试比较两个变量的一系列操作的最终结果。由于操作是相同的,我对这两个变量使用java流。但我需要根据对象的子变量返回结果。例如:

class MyClass {
  String strVal;
  Integer intVal;
}

MyClass myFunction(MyClass myClass1, MyClass myClass2) {
   Stream.of(myClass1, myClass2)
      .map(function) // get intVal for both objects
      .filter(predicate)
      ...
   // return myClass1 if myClass1.intVal > myClass2.intVal, otherwise myClass2
   // current implementation
   return myClass1.intVal > myClass2.intVal ? myClass1 : myClass2;

}

是否有可以在流中使用的等效三元运算符?也许需要创建新的功能接口?

我问的原因是,这不是代码中唯一根据比较结果获取值的地方。有些地方我需要使用像

这样的函数
return myClass1.intVal > myClass2.intVal ? function(myClass1) : function(myClass2);

我了解stream是如何实现的,就像下面提到的评论部分。但整个概念是让代码更干净。因此,如果有一种更简洁的方法来仅使用一个函数返回值,那么这比对所有变量重复该函数要好。

java java-stream
2个回答
0
投票
  public static MyClass myFunction(MyClass myClass1, MyClass myClass2) {
    List<MyClass> list = List.of(myClass1,myClass2);
    return list.stream().max(Comparator.comparing(MyClass::getIntVal))
                        .orElseThrow(NoSuchElementException::new);
}

0
投票

当仅比较 2 个元素时,我坚持使用三元运算符,但如果您确实想使用流,那么您可以使用

.max()
方法将其传递给一个比较器,您可以在其中根据您的策略定义哪个对象更大(在这种情况下谁的 intVal 更大),就像这样:

MyClass myFunction(MyClass myClass1, MyClass myClass2) {
    // return myClass1 if myClass1.intVal > myClass2.intVal, otherwise myClass2
    return Stream.of(myClass1, myClass2)
            .max((m1, m2) -> m1.intVal.compareTo(m2.intVal))
            .get();
}
© www.soinside.com 2019 - 2024. All rights reserved.