我正在使用一个列表
我的代码如下-
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()));
}
}
你有2个问题:
>
entries.sort(比较器。
您没有正确指定泛型类型::getKey。在此处指定泛型类型或使用lambda表达式。
示例,下面使用lambda表达式
entries.sort(Comparator.<Pair<String, Integer>, String>comparing(p -> p.getKey()).thenComparingInt(Pair::getValue));
您可以将JOOL库用于元组类型。它扩展了对java-8的支持。
使用配对进行比较
entries.sort(Comparator.comparing(Pair<String,Integer>::getKey) .thenComparingInt(Pair::getValue))
比较器::comparing
需要两个通用参数T
和U
:
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。