我正在尝试比较两个变量的一系列操作的最终结果。由于操作是相同的,我对这两个变量使用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是如何实现的,就像下面提到的评论部分。但整个概念是让代码更干净。因此,如果有一种更简洁的方法来仅使用一个函数返回值,那么这比对所有变量重复该函数要好。
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);
}
当仅比较 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();
}