我有一个管理歌曲列表,所以这是我现在排序歌曲的标准。我如何将其“转换”为lambda表达式?
gestionCancionList.sort(new Comparator<GestionCancion>() {
@Override
public int compare(GestionCancion t1, GestionCancion t2){
return t1.vecesQueSeRepite == t2.vecesQueSeRepite ?
t1.song.dameInterprete().compareTo(t2.song.dameInterprete())
: (int)(t2.vecesQueSeRepite - t1.vecesQueSeRepite);
}
}
答案 0 :(得分:3)
使用Allura;Password123;5.00;0.0;10.00
工厂方法和方法参考(如果可能):
Comparator
然后制作代码:
Comparator.<GestionCancion, Veces>comparing(gc -> gc.vecesQueSeRepite).reversed()
.thenComparing(GestionCancion::dameInterprete);
诀窍是应用gestionCancionList.sort(
Comparator.<GestionCancion, Veces>comparing(gc -> gc.vecesQueSeRepite).reversed()
.thenComparing(GestionCancion::dameInterprete));
来保持代码整洁。
请注意,访问字段时需要显式输入lambda(您尚未向我们显示reversed()
的类型;我假设vecesQueSeRepite
- 根据需要替换实际类型。
答案 1 :(得分:2)
更简单:
Comparator<GestionCancion> aName = (t1,t2) -> t1.vecesQueSeRepite == t2.vecesQueSeRepite ?
t1.song.dameInterprete().compareTo(t2.song.dameInterprete())
: (int)(t2.vecesQueSeRepite - t1.vecesQueSeRepite);
参数类型由比较器的泛型类型暗示。
编辑:它可以比上面更简单。比较器不需要单独定义。 lambda表达式可以立即传递给sort方法。同样在这种情况下,参数的类型由集合对象的泛型类型隐含。因此:
gestionCancionList.sort((t1,t2) -> t1.vecesQueSeRepite == t2.vecesQueSeRepite ?
t1.song.dameInterprete().compareTo(t2.song.dameInterprete())
: (int)(t2.vecesQueSeRepite - t1.vecesQueSeRepite));
答案 2 :(得分:0)
简单
Comparator<GestionCancion> aName = (GestionCancion t1, GestionCancion t2)->t1.vecesQueSeRepite == t2.vecesQueSeRepite ?
t1.song.dameInterprete().compareTo(t2.song.dameInterprete())
: (int)(t2.vecesQueSeRepite - t1.vecesQueSeRepite);
示例here