当前位置: 首页 > 知识库问答 >
问题:

lambda表达式内的空检查[重复]

陆子航
2023-03-14

检查d1是否正确的最佳方法是什么。getDept()和d2。在进行比较之前,getDept()在以下lambda中是否为null?空检查应该在集合之前完成吗。sort()还是可以在lambda语句中完成?

if (sortBy.contains("Dept")) {
            Collections.sort(inventoryVariances, (d1, d2) -> d1.getDept().compareTo(d2.getDept()));
        }

我需要确保在尝试按部门排序之前,每个对象的部门数据不为空。

共有2个答案

谢鸿
2023-03-14

重复使用Java8流处理空属性,并使用lambda表达式进行排序

直接回答是“否”。集合不支持空值。java 8 comparator nullfirst和nullLast的使用对于集合来说也是一个棘手的问题,正如文档所示:“如果指定的比较器为null,那么返回的比较器会认为所有非null值都相等。”

不过,最简单的方法是先过滤掉空值:假设要排序的集合是arraylist,并且要将其转换为另一个排序列表,则可以执行以下操作:

inventoryVariances.stream().filter(d -> d.getDept() !=null).sorted(Variance::getDept).collect(Collectors.toCollection(LinkedList::new ));
    
锺离浩慨
2023-03-14

您可以尝试过滤空值:

inventoryVariances
.stream()
.filter(c -> c.getDept() !=null)
.sort((d1, d2) -> d1.getDept().compareTo(d2.getDept())
 类似资料:
  • 问题内容: 您能解释一下为什么必须从lambda表达式中捕获已检查的异常吗?换句话说,为什么以下代码无法编译… 但是这个会吗? 似乎被调用方现在必须处理引发的所有已检查异常,而不是调用方。 问题答案: 问题不是lambda表达式,而是它正在实现的接口。请记住,lambda表达式基本上只是实现给定接口的匿名类的简写。 在这种情况下,请输入: 注意,没有声明抛出任何东西。这意味着它的任何实现都不能抛出

  • 我是Java8的新手,正在学习lambda表达式。 我有接口。 检查配置是否为空,返回空字符串。 检查集合是否为空,返回空字符串。 如果collection不为null,并且key存在,则返回值else return“”; 在Java8中如何做到这一点? 试过这个: 也发布了Java7代码,我试图用lambda表达式解决Java7的if-else部分。

  • (译注:目前支持lambda的gcc编译器版本为4.5,其它详细的编译器对于C++11新特性的支持请参考http://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport) Lambda表达式是一种描述函数对象的机制,它的主要应用是描述某些具有简单行为的函数(译注:Lambda表达式也可以称为匿名函数,具有复杂行为的函数可以采用命名函数对象,当然,何谓复杂

  • 我正在尝试在Java中使用Lambda表达式来理解以下方法参考代码: 我的问题是,为什么函数sameTemp只有一个参数?接口声明它必须有2个参数,所以对我来说没有意义。也许hTemp实例变量对这两个都足够了?我从Java完整参考书中获得了这一点,作者在那里解释了这一点: 块引用 在程序中,请注意HighTemp有两个实例方法:

  • Lambda表达式在Java 8中引入,并被吹捧为Java 8的最大特性.Lambda表达式有助于函数式编程,并简化了很多开发。 语法 (Syntax) lambda表达式的特征在于以下语法。 parameter -> expression body 以下是lambda表达式的重要特征。 Optional type declaration - 无需声明参数类型。 编译器可以从参数的值推断出相同的

  • 我需要的算法,将检查是否给定的表达式是中缀,后缀或前缀表达式。我尝试了一种方法,通过检查字符串的第一个或最后两个项,例如。 AB如果字符串的第一个索引中有一个运算符,那么它就是一个前缀 AB如果字符串的最后一个索引中有一个运算符,那么它就是一个后缀 否则它就是一个中缀。 但是感觉不太合适,所以请建议我一个更好的算法。