舱位声明:
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()));
P.S:全部用于任何单线.
解决方法
伙计们给了你很好的答案.它不应该是对他们答案的改进.我只想提供另一种想法.
entities.sort(Comparator.comparing(((Function<Entity,SubEntity>)Entity::getSubEntity).andThen(SubEntity::getAmount)));
我通过将两个函数Entity :: getSubEntity和SubEntity :: getAmount与Function#andThen
组合来形成一个密钥提取器.两者都被编写为方法引用.需要强制转换来确定实例的类型,并在该实例上调用andThen.