我一直在研究Collections.sort和之间的区别list.sort,特别是关于使用Comparator静态方法以及lambda表达式中是否需要param类型.在我们开始之前,我知道我可以使用方法引用,例如Song::getTitle克服我的问题,但我的查询并不是我想修复的东西,而是我想要的答案,即为什么Java编译器以这种方式处理它.
这是我的发现.假设我们有一个ArrayList类型Song,添加了一些歌曲,有3种标准的get方法:
ArrayList<Song> playlist1 = new ArrayList<Song>();
//add some new Song objects
playlist.addSong( new Song("Only Girl (In The World)", 235, "Rhianna") );
playlist.addSong( new Song("Thinking of Me", 206, "Olly Murs") );
playlist.addSong( new Song("Raise Your Glass", 202,"P!nk") );
Run Code Online (Sandbox Code Playgroud)
这里调用两种类型的排序方法,没问题:
Collections.sort(playlist1,
Comparator.comparing(p1 -> p1.getTitle()));
playlist1.sort(
Comparator.comparing(p1 -> p1.getTitle()));
Run Code Online (Sandbox Code Playgroud)
一旦我开始连锁thenComparing,就会发生以下情况:
Collections.sort(playlist1,
Comparator.comparing(p1 -> p1.getTitle())
.thenComparing(p1 -> p1.getDuration())
.thenComparing(p1 -> p1.getArtist())
);
playlist1.sort(
Comparator.comparing(p1 -> p1.getTitle())
.thenComparing(p1 -> p1.getDuration()) …Run Code Online (Sandbox Code Playgroud) 可能重复:
使用多个键对Java对象进行排序
我找不到使用此方法的任何示例,所有示例都给出第二个参数"null".我听说这个方法用于根据多个标准对类进行排序,但没有找到示例.
public class Student implements Comparable<Student> {
String name;
int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return name + ":" + age;
}
@Override
public int compareTo(Student o) {
Integer myAge = age;
Integer oAge = o.age;
return myAge.compareTo(oAge);
}
Run Code Online (Sandbox Code Playgroud)
}
对于这个类,如果我想根据他们的姓名和年龄对学生列表进行排序我如何使用方法集合排序(List,Comparator)
我有一个Player对象列表从控制器传递到JSP,我想在同一页面上以几种不同的方式显示它们:
我可以在模型中放置单独的排序副本,但处理显示相同列表的不同方式似乎更像是视图的责任,所以我想避免将逻辑放在控制器中,如果可以的话.我已经有几个实现Comparator的类来帮助实际排序.
在JSP中执行此操作的最佳方法是什么?
我可以在将列表传递给不同的forEach标签之前对其进行排序吗?
这不是我为了理解下一步要做什么而模拟的真实代码。
我有一个具有年龄、身高体重属性的 Person 类。
现在在我的班级组中,
我创建了两个四个对象
Person programmer, student, clerk, tech;
Run Code Online (Sandbox Code Playgroud)
我有 HashMap rollCall
Map<Person, Integer> rollCall = new HashMap<Person, Integer>();
Run Code Online (Sandbox Code Playgroud)
使用 Person 和 Number of Persons 作为整数类型添加所有这些
rollCall.put(programmer, 1);
rollCall.put(clerk, 2);
rollCall.put(student, 1);
rollCall.put(tech, 3);
Run Code Online (Sandbox Code Playgroud)
我见过很多人使用 TreeMap 根据值对 HashMap 进行排序,我想对 Person 的属性而不是值进行排序。我想按年龄对所有这些人进行排序(即程序员.getAge();)。我不确定我是否会使用仅适用于集合而非地图的比较器。. 请帮忙 ... 。
我正在尝试通过其中一个字段按特定顺序对流进行排序.
现在我通过将流转换为列表并使用开关然后将它们重新加入到所需顺序的列表中来实现此目的.
fruits.forEach(fruit -> {
switch (fruit.getName()) {
case "Orange":
orangesList.add(fruit);
break;
case "Apple":
applesList.add(fruit);
break;
case "WaterMelon":
watermelonList.add(fruit);
break;
default:
otherFruits.add(fruit);
break;
}
});
genericFruitList.addAll(0, orangeList);
genericFruitList.addAll(1, applesList);
genericFruitList.addAll(2, watermelonList);
genericFruitList.addAll(3, otherFruits);
我想知道是否有任何改变使用流排序方法和使用自定义比较器或类似的东西来实现这一点.
提前致谢.
如何通过多个属性对HashMap条目进行排序.
假设我有一个带有键字符串和值为Object的映射.
Map<String, UserMetrics> map = new HashMap<>
map.put("user10",new UserMetrics(1,100,111));
map.put("user3",new UserMetrics(10,330,444));
map.put("user11",new UserMetrics(333,100,555));
map.put("user1",new UserMetrics(1,111,433));
public static class UsageMetrics implements Serializable {
private long param1;
private long param2;
private long param3;....
}
Run Code Online (Sandbox Code Playgroud)
我想先用"param1"排序用户,然后用"param2"排序
结果预期:<>
user10, UserMetrics(1,100,111)
user1, UserMetrics(1,111,433))
user3, UserMetrics(10,330,444));
user11, UserMetrics(333,100,555))
Run Code Online (Sandbox Code Playgroud) 我没有使用Java 8,而是使用Java 6
我想向程序发送参数进行排序
1)(按数量)或(按desc)和
2)上升或下降。
无法了解如何在compareTo()中实现此检查
以下是Javacode:
package no.java6.listsort;
public class Fruit implements Comparable<Fruit>{
private int quantity;
private String desc;
public Fruit()
{
}
public Fruit(String desc, int quantity)
{
this.desc = desc;
this.quantity = quantity;
}
public int getQuantity() {
return quantity;
}
public String getDesc() {
return desc;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
public void setDesc(String desc) {
this.desc = desc;
}
@Override
public int compareTo(Fruit o) {
return o.getDesc().compareTo(this.getDesc());
//here i …Run Code Online (Sandbox Code Playgroud) java ×7
java-8 ×3
comparator ×2
sorting ×2
collections ×1
comparable ×1
hashmap ×1
java-stream ×1
jsp ×1
lambda ×1