我得到了一个对象Recipe
,它实现了Comparable
public int compareTo(Recipe otherRecipe) {
return this.inputRecipeName.compareTo(otherRecipe.inputRecipeName);
}
我已经这样做了,因此我能够按照以下方法按字母顺序对
列表进行排序:
public static Collection<Recipe> getRecipes(){
List<Recipe> recipes = new ArrayList<Recipe>(RECIPE_MAP.values());
Collections.sort(recipes);
return recipes;
}
但是现在,在另一种方法中,让我们调用它
getRecipesSort()
,我想对同一个列表进行排序,但要进行数字排序,比较包含其ID的变量。更糟糕的是,ID字段的类型是字符串
。
如何使用集合。sort()在Java中执行排序?
创建一个比较器,它在构造函数中接受比较模式,并根据您的需求为不同的场景传递不同的模式
public class RecipeComparator implements Comparator<Recipe> {
public static final int COMPARE_BY_ID = 0;
public static final int COMPARE_BY_NAME = 1;
private int compare_mode = COMPARE_BY_NAME;
public RecipeComparator() {
}
public RecipeComparator(int compare_mode) {
this.compare_mode = compare_mode;
}
@Override
public int compare(Recipe o1, Recipe o2) {
switch (compare_mode) {
case COMPARE_BY_ID:
return o1.getId().compareTo(o2.getId());
default:
return o1.getInputRecipeName().compareTo(o2.getInputRecipeName());
}
}
}
实际上,对于需要单独处理的数字,请在下面进行检查
public static void main(String[] args) {
String string1 = "1";
String string2 = "2";
String string11 = "11";
System.out.println(string1.compareTo(string2));
System.out.println(string2.compareTo(string11));// expected -1 returns 1
// to compare numbers you actually need to do something like this
int number2 = Integer.valueOf(string1);
int number11 = Integer.valueOf(string11);
int compareTo = number2 > number11 ? 1 : (number2 < number11 ? -1 : 0) ;
System.out.println(compareTo);// prints -1
}
Nincompop给出的答案可以使用Lambda表达式简化:
Collections.sort(食谱,(食谱r1,食谱r2)-
Java8之后还介绍了比较器接口中的比较器构造方法。使用这些,可以进一步将其减少到1:
recipes.sort(comparingInt(Recipe::getId));
1布洛赫,J.有效Java(3rdEdition)。2018年。项目42, p.194.
使用此方法Collections.sort(List,比较器)。实现一个比较器并将其传递给Collections.sort()。
class RecipeCompare implements Comparator<Recipe> {
@Override
public int compare(Recipe o1, Recipe o2) {
// write comparison logic here like below , it's just a sample
return o1.getID().compareTo(o2.getID());
}
}
然后使用
比较器
作为
Collections.sort(recipes,new RecipeCompare());
问题内容: 我尝试了以下行: 但是Netbeans 7拒绝此操作,并显示错误消息。 我已将“源/二进制”格式设置为“ JDK 7”,将平台设置为“ JDK 1.7”,我还需要做其他事情吗? 问题答案: 正如这个问题所讨论的,Java 7和Java 8都不支持集合文字:ProjectCoin的集合增强功能是否将在JDK8中使用? 如果只需要不可变的集合,则可以使用Google的Guava库。,并且具
问题内容: 除了a 和Java 可以两次包含相同的元素外,a 和Java 之间在实践上还有什么区别吗?它们具有相同的方法。 (例如,是否给我更多选择来使用接受s但不接受s的库?) 编辑: 我可以认为至少有5种不同的情况来判断这个问题。其他人还能提出更多建议吗?我想确保我了解这里的微妙之处。 设计接受或参数的方法。更通用,并接受更多输入可能性。(如果我正在设计特定的类或接口,那么对我的消费者会更好,
我需要计算下一个列表中的元素,我有一个listartif列表,对于它们的每个元素,我都有一个发现列表,对于每个发现对象,我都有一个名为isChecked的字段,所以我需要计算列表中所有检查过的发现。我已经做了下一个,但是我得到了列表中元素的总数。 有什么想法吗? 谢谢
本文向大家介绍如何使用Java从集合中删除多个文档?,包括了如何使用Java从集合中删除多个文档?的使用技巧和注意事项,需要的朋友参考一下 在Java中,com.mongodb.client.MongoCollection接口提供了方法deleteMany()。使用此方法,您可以一次从集合中删除多个文档,为此,您需要通过指定删除条件的过滤器。 示例 输出结果
如何使用将单个集合从一个数据库移动到另一个数据库? 我应该如何使用该命令及其选项?
问题内容: 在Java中使用Collection.sort时,如果内部对象之一为null,应该返回什么? 例: 可以说o2不是null,但o2.getDate()是,因此添加null验证时我应该返回1还是-1或0? 问题答案: 自然,这是您的选择。无论您编写什么逻辑,它都会定义排序规则。因此,“应该”在这里并不是正确的词。 如果您希望null出现在任何其他元素之前,则可以这样做