类别声明:
class Entity {
String name;
SubEntity subEntity; // subEntity has a method getAmount() which returns int
}
据我所知,使用Java 8,我们可以进行如下排序:
entities.sort(Comparator.comparing(Entity::name));
但有没有办法根据子实体的属性对其进行排序,例如:
entities.sort(Comparator.comparing(Entity::SubEntity::getAmount()));
附言:所有人都支持任何俏皮话。
您可以通过lambda而不是方法引用来实现这一点:
entities.sort(Comparator.comparing(x -> x.getSubEntity().getAmount())
如果您的评论中确实有int
,请使用:
Comparator.comparingInt(...)
伙计们给了你很好的答案。这不应该比他们的答案有什么进步。我只是想提供另一个想法。
entities.sort(Comparator.comparing(((Function<Entity, SubEntity>)Entity::getSubEntity).andThen(SubEntity::getAmount)));
我通过将两个函数Entity::getSubEntity
和SubEntity::getAmount
与Function#和
组合,形成了一个键提取器。两者都是作为方法引用编写的。强制转换需要确定实例的类型,然后对该实例调用
,然后调用
。
不是通过使用方法引用,不是-但是使用lambda很容易:
entities.sort(Comparator.comparing(entity -> entity.getSubEntity().getAmount()));
从根本上说,没有什么神奇的Comparator.comparing
-它只是接受一个函数
所以,我基本上学会了C++中的类和模板函数。假设我有一个班级学生的记录,上面有他们的卷号、姓名和总分。我正在使用索引排序对记录进行排序。现在可以根据姓名、卷面或总分进行排序。如何使用模板函数合并所有这三个? 所以我不想一遍又一遍地写函数,而是想用R[A[j]].name替换R[A[j]].roll和R[A[j]].total。有可能吗?
问题内容: 在程序运行之前,我需要从一个不知道的位置将一些属性加载到Spring上下文中。 所以我认为,如果我有一个不带位置的PropertyPlaceholderConfigurer,它将从系统属性中读取,然后可以在上下文中使用该位置:property- placeholder 像这样 但这是行不通的 保罗 问题答案: 这里的问题是您正在尝试使用属性占位符语法配置属性占位符:)这有点像鸡和蛋的情
两者之间有什么区别 静态归属[作者:作者] 当static bongsto=Author保留在Books域中时,对数据库没有影响。但是,静态bongsto=[author:author]创建了对author类的反向引用,并且在DB中还有author_id列。因此,实际只使用静态bongsto=Author所做的事情。这是在grails文档(http://grails.github.io/grail
静态编程语言中的属性和开放属性有什么区别?下面的代码抱怨我声明setter私有,Intellij说开放属性不允许私有setter。什么是开放属性? 为什么上面的代码无效,而这个代码有效? 编辑:我使用的是spring-allopen插件,将类显式标记为open并没有什么不同。
问题内容: 我只是在学习Python,而且我来自C语言,所以如果我之间有任何混淆/混淆,请告诉我。 假设我有以下课程: 这是一个名为的类,该类会使构造函数重载,以便在需要时能够处理不同的参数。 是什么定义之间的差异在只(如上图所示),而不是执行以下操作: 是不是在相同类的变量定义?难道不只是覆盖从传递到的值? 问题答案: 一个是类属性,而另一个是实例属性。它们是不同的,但是它们之间的紧密联系使它们
主要内容:在类体中和类体外定义成员函数的区别类可以看做是一种数据类型,它类似于普通的数据类型,但是又有别于普通的数据类型。类这种数据类型是一个包含成员变量和成员函数的集合。 类的成员变量和普通变量一样,也有数据类型和名称,占用固定长度的内存。但是,在定义类的时候不能对成员变量赋值,因为类只是一种数据类型或者说是一种模板,本身不占用内存空间,而变量的值则需要内存来存储。 类的成员函数也和普通函数一样,都有返回值和参数列表,它与一般函数的区别是