当前位置: 首页 > 知识库问答 >
问题:

如何使用集合。Java中的sort()?

靳金鹏
2023-03-14

我得到了一个对象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中执行排序?


共有3个答案

巴英韶
2023-03-14

创建一个比较器,它在构造函数中接受比较模式,并根据您的需求为不同的场景传递不同的模式

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
}
戚星腾
2023-03-14

Nincompop给出的答案可以使用Lambda表达式简化:

Collections.sort(食谱,(食谱r1,食谱r2)-

Java8之后还介绍了比较器接口中的比较器构造方法。使用这些,可以进一步将其减少到1

recipes.sort(comparingInt(Recipe::getId));

1布洛赫,J.有效Java(3rdEdition)。2018年。项目42, p.194.

鲍理
2023-03-14

使用此方法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出现在任何其他元素之前,则可以这样做