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

在Java中排序对

姜乐语
2023-03-14

我正在使用一个列表

我的代码如下-

import javafx.util.Pair;
import java.util.*;
class Tuple
{
    // Demonstrate javafx.util.Pair class introduced in Java 8
    public static void main(String[] args)
    {
        List<Pair<String, Integer>> entries = new ArrayList<>();

        entries.add(new Pair<String,Integer>("C", 20));
        entries.add(new Pair<>("C++", 10));
        entries.add(new Pair<>("Java", 30));
        entries.add(new Pair<>("Python", 10));
        entries.add(new Pair<>("PHP", 20));
        entries.add(new Pair<>("PHP", 10));

        // Comparator<Pair<String,Integer>> c=Comparator.<Pair<String,Integer>>comparing(e->e.getKey).thenComparingInt(Pair::getValue;
        //entries.sort(c.reversed());
        // Comparator<Pair<String,Integer>> c=Comparator.<Pair<String,Integer>>comparing(e->e.getKey).thenComparingInt(Pair::getValue);
        entries.sort(Comparator.<Pair<String,Integer>>comparing(Pair::getKey).thenComparingInt(Pair::getValue));
        entries.forEach(e->System.out.println(e.getKey()+" "+e.getValue()));

    }
}


共有3个答案

强金鑫
2023-03-14

你有2个问题:

>

  • entries.sort(比较器。

    您没有正确指定泛型类型::getKey。在此处指定泛型类型或使用lambda表达式。

    示例,下面使用lambda表达式

     entries.sort(Comparator.<Pair<String, Integer>, String>comparing(p -> p.getKey()).thenComparingInt(Pair::getValue));
    

    您可以将JOOL库用于元组类型。它扩展了对java-8的支持。

  • 丁阎宝
    2023-03-14

    使用配对进行比较

    entries.sort(Comparator.comparing(Pair<String,Integer>::getKey) .thenComparingInt(Pair::getValue))
    
    唐兴贤
    2023-03-14

    比较器::comparing需要两个通用参数TU

    static <T, U extends Comparable<? super U>> Comparator<T> comparing(Function<? super T, ? extends U> var0)
    

    并且您正在传递一个。第一个参数是您正在比较的对象类型,第二个参数是您正在比较的属性。试试这个:

    Comparator<Pair<String, Integer>> pairComparator = Comparator.<Pair<String, Integer>, String>comparing(Pair::getKey).thenComparingInt(Pair::getValue);
    entries.sort(pairComparator);
    

    此外,我不鼓励为此使用类表单JavaFX和抽象映射。简单尝试,例如:

    public static void main(String[] args) {
            List<AbstractMap.SimpleEntry<String, Integer>> entries = new ArrayList<>();
    
            entries.add(new AbstractMap.SimpleEntry<String, Integer>("C", 20));
            entries.add(new AbstractMap.SimpleEntry<>("C++", 10));
            //...
    
            Comparator<AbstractMap.SimpleEntry<String, Integer>> simpleEntryComparator = Comparator.<AbstractMap.SimpleEntry<String, Integer>, String>comparing(AbstractMap.Entry::getKey).thenComparingInt(AbstractMap.SimpleEntry::getValue);
            entries.sort(simpleEntryComparator);
            entries.forEach(e -> System.out.println(e.getKey() + " " + e.getValue()));
    }
    
     类似资料:
    • 问题内容: 我在Java中有一个记录的类。 我有一个forloop,使该类的多个实例并将它们添加到列表中。 假设每个类都有一个分配给他们的值,我该如何根据值(最大的在前)排序列表 问题答案: 您可以使用;并实现接口并编写决定对列表进行排序的实现方法。 为了实施, 参考: 详细编码。

    • 问题内容: 我正在尝试通过sequelize从数据库中输出所有对象列表,如下所示,并希望在我在where子句中添加id时对数据进行整理。 但是问题是渲染后,所有数据按如下进行整理。 正如我发现的那样,它既没有按ID也没有按名称排序。请帮我解决。 问题答案: 在序列化中,您可以轻松添加order by子句。 看看我如何添加对象数组? 编辑: 一旦在诺言中收到对象,您可能必须订购这些对象。查看有关根据

    • 我创建了这个随机生成的arraylist,它生成1-50个数字。我想按升序对生成的数字进行排序。不使用集合。sort,我如何使用ArrayList进行排序?

    • 问题内容: 我有一堂水果课。我正在创建此类的列表,并将每个水果添加到列表中。我想根据水果名称的顺序对该列表进行排序。 我正在使用for循环创建它的列表 我需要使用列表中每个对象的水果名称对该arrayList进行排序 问题答案: 使用这样的: 现在,你的水果清单将基于进行排序。

    • 问题内容: 我们如何排序? 我想根据中的值进行排序。 问题答案: 你是否必须使用HashMap?如果只需要Map Interface,请使用TreeMap 如果要通过比较HashMap中的值进行排序。你必须编写代码才能执行此操作,如果要执行此操作,则可以对HashMap的值进行排序: 如果你想经常访问此排序列表,则可以将元素插入到中,尽管集合和列表的语义有些不同。

    • 问题内容: 我不能在数据库中执行ORDER BY 问题答案: 将数据从ResultSet中移到所需的任何对象表示形式中,然后对数据进行排序,就像此时的其他任何数据一样。 如果您使用Collections.Sort对复杂对象进行排序,则需要实现Comparator。