【问题标题】:Switching the Sort filter Parameter in Java 8 Comparator's Sort method在 Java 8 Comparator 的 Sort 方法中切换 Sort filter 参数
【发布时间】:2019-08-05 09:12:37
【问题描述】:

如何根据 Java 8 流中的空检查更改排序参数。

例子:

myList = myList .stream().sorted(Comparator.comparing(Profile::getFirstName)).collect(Collectors.toList());

这里如果 getFirstName 结果为 NULL,我想使用另一个值 getLastName。

喜欢:

if(Profile.getFirstName()==null)

Sort using Profile.getLastName()

else

Sort using Profile.getFirstName()

【问题讨论】:

  • 不要使用方法引用,而是使用 lambda?
  • 除非硬性要求用新列表替换列表,否则您可以在列表上调用sort(comparator),顺便说一句。

标签: java java-8 comparator


【解决方案1】:
...sorted(Comparator.comparing(x -> x.getFirstName() == null ? x.getLastName() : x.getFirstName()))....

【讨论】:

  • 这不会编译,因为 Comparator 功能接口需要两个参数。
【解决方案2】:

我这样做了:

 myList = myList.stream().sorted(Comparator.comparing(profile->profile.getFirstName()==null? profile.getLastName():profile.getFirstName())).collect(Collectors.toList()); 

【讨论】:

    【解决方案3】:
        myList.stream().sorted((a, b) -> {
            if(a.getFirstName() != null && b.getFirstName() != null) {
                return a.getFirstName().compareTo(b.getFirstName());
            }
    
            if (a.getLastName() != null && b.getLastName() != null) {
                return a.getLastName().compareTo(b.getLastName());
            }
    
            return 0;
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-17
      • 2015-06-17
      • 1970-01-01
      • 2013-10-29
      • 1970-01-01
      • 2021-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多