Java 如何在scala中使用val代替var

Java 如何在scala中使用val代替var,java,scala,if-statement,collections,functional-programming,Java,Scala,If Statement,Collections,Functional Programming,我只是想删除var,并在下面的代码中使用Val def getConfigId: Long = { val object1: java.util.List[objectA] = objectRepo.findByUser(User(session.id)) var object2: objectA = null if (object1.size() == 1) { object2 = object1.get(0) } else if (object1.size() > 1) {

我只是想删除var,并在下面的代码中使用Val

def getConfigId: Long = {
val object1: java.util.List[objectA] = objectRepo.findByUser(User(session.id))

var object2: objectA = null
if (object1.size() == 1) {
  object2 = object1.get(0)
} else if (object1.size() > 1) {
  object2 = object1.get(0)
  object1.forEach(a => if (a.endDate.compareTo(object2.endDate) >= 0) {
    object2 = a
  })
}
object2.configId
}
我正在尝试用例匹配,但它不起作用

def getConfigId: Long = {
val object1: java.util.List[objectA] = objectRepo.findByUser(User(session.id))

val object2: objectA = {
  case x if object1.size() == 1 => object1.get(0)

  case x => if (object1.size() > 1) {
    object1.get(0)
    object1.forEach(a => if(a.endDate.compareTo(object2.endDate) >= 0) {
     object2 = a
   })
}

如果
是Scala中的表达式,则返回结果值。这意味着,您可以保留逻辑,只需将
if
语句的返回值分配给变量:

var object2: objectA = if (object1.size() == 1) {
    object1.get(0)
  } else if (object1.size() > 1) {
    object1
      .filter(a => (a.endDate.compareTo(object1.get(0).endDate) >= 0))
      .lastOption
      .orElse(Some(object1.get(0)))
      .get
  }
甚至更简单:

val object2 = object1
      .filter(a => (a.endDate.compareTo(object1.get(0).endDate) >= 0))
      .last
这是:

import scala.jdk.javaapi.CollectionConverters

def getConfigId: Long = {
  val values = objectRepo.findByUser(User(session.id))
  val index = values.asScala.map(_.endDate).zipWithIndex.max._2
  values.get(index).configId
}
或:


val object2:objectA=object1.findLast(uu.endDate.compareTo(object1.get(0.endDate>=0))
@jwvh感谢您的回复,但我从esse@jwvh你说得对,我没注意到,谢谢!顺便说一句,您的两个解决方案都是错误的:),例如,对于日期:[1,2,3,4,1],您将得到最新的1,而不是4。@esse这与问题中的相同,正如前面所说的,不是最新的latest@Andronicus谢谢你的回复,但我从你那里得到了答案esse@Rohan结果是一个完全不同的值,但okIt不应该是最新的,但是列表中的最后一个元素不早于第一个元素。
import scala.jdk.javaapi.CollectionConverters

def getConfigId: Long = 
  objectRepo.findByUser(User(session.id)).asScala.reverse.maxBy(_.endDate).configId