【问题标题】:Java stream sorting objects based on the double value基于双精度值的Java流排序对象
【发布时间】:2019-10-07 19:28:25
【问题描述】:

我有X1 对象的列表,并尝试根据返回Double 值的方法obj_function() 对列表进行排序。

result = custom_obj_list.stream()
    .sorted((x1,x2) -> {
        return -x1.obj_function().compareTo(x2.obj_function());
    }).filter((x2) -> { 
        return x2.obj_function <= 1; 
    }).collect(Collectors.toList());

但我正在努力解决以下错误消息

stream().sorted() 无法解析符号或无法解析方法

【问题讨论】:

  • .sorted(x1,x2) -&gt; { 不是一个有效的语法
  • .sorted(x1,x2) - 你错过了(
  • 另外,如果你的 lambda 只是一个返回值,你就不需要块作用域。即(x, y) -&gt; { return x + y; }可以简化为(x, y) -&gt; x + y
  • Cannot resolve method ... 你漏掉了最重要的部分。
  • compareTO – 你确定吗?

标签: java lambda java-stream


【解决方案1】:

您可以使用Comparator.comparing 代替 lambda 表达式,如果您只想要默认排序顺序

result = custom_obj_list.stream()
                        .sorted(Comparator.comparingDouble(X1::obj_function))  //X1 should be class name
                        .filter(x2 -> x2.obj_function() <= 1)
                        .collect(Collectors.toList());

或反向排序

result = custom_obj_list.stream()
                        .sorted(Comparator.comparingDouble(X1::obj_function).reverse()))   ////X1 should be class name
                        .filter(x2 -> x2.obj_function() <= 1)
                        .collect(Collectors.toList());

【讨论】:

  • 可能想多看看这个。您将 obj_function 用作方法和字段。
  • 谢谢,我确实看到他提到它作为方法并根据@flakes 更新代码
  • 想一想,这可能是 OP 的问题。我打赌他们对obj_function的定义实际上是int,导致方法解析错误lol
  • 如果可以是Integer也可以,但如果是int他可以使用https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html#comparingInt-java.util.function.ToIntFunction-@flakes我就等他回来
  • sry,这是一个Doubleobj_function 返回的是什么
猜你喜欢
  • 1970-01-01
  • 2012-11-06
  • 2017-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-15
  • 2012-11-03
相关资源
最近更新 更多