Java 对一对进行排序<;字符串,整数>;在爪哇
我正在使用一个Java 对一对进行排序<;字符串,整数>;在爪哇,java,list,arraylist,java-8,comparator,Java,List,Arraylist,Java 8,Comparator,我正在使用一个列表并根据键和值进行排序,但它显示了以下错误,因为非静态方法getKey()无法从静态上下文引用 我的代码如下- 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&l
列表
并根据键和值进行排序,但它显示了以下错误,因为非静态方法getKey()无法从静态上下文引用
我的代码如下-
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()));
}
}
导入javafx.util.Pair;
导入java.util.*;
类元组
{
//演示Java 8中引入的javafx.util.Pair类
公共静态void main(字符串[]args)
{
列表项=新的ArrayList();
增加(新的一对(“C”,20));
添加(新的一对(“C++”,10));
添加(新的一对(“Java”,30));
添加(新的一对(“Python”,10));
添加(新的一对(“PHP”,20));
添加(新的一对(“PHP”,10));
//比较器c=比较器。比较(e->e.getKey)。然后比较(Pair::getValue;
//条目.sort(c.reversed());
//比较器c=比较器。比较(e->e.getKey)。然后比较(Pair::getValue);
entries.sort(Comparator.comparing(Pair::getKey)。然后比较int(Pair::getValue));
entries.forEach(e->System.out.println(e.getKey()+“”+e.getValue());
}
}
使用Pair::getKey进行比较
:
entries.sort(Comparator.comparing(Pair<String,Integer>::getKey) .thenComparingInt(Pair::getValue))
entries.sort(Comparator.comparing(Pair::getKey)。然后比较int(Pair::getValue))
Comparator::comparating
采用两个通用参数T
和U
:
static <T, U extends Comparable<? super U>> Comparator<T> comparing(Function<? super T, ? extends U> var0)
您有两个问题:
entries.sort(Comparator.comparating)(
您只指定了一个generic类型,而预期的是两个generic类型,即您的可比较对象类型和键类型。在本例中缺少键类型类型::getKey
。请在此处指定泛型类型或使用lambda表达式 entries.sort(Comparator.<Pair<String, Integer>, String>comparing(p -> p.getKey()).thenComparingInt(Pair::getValue));
entries.sort(Comparator.comparing(p->p.getKey())。然后比较int(Pair::getValue));
您可以将库用于元组类型。它扩展了对java-8的支持。可能的重复项不适用于
Pair
到您以前使用的问题comparingit
,而不是comparing
。使用时代码会变得更简单,例如比较器。比较(Pair::getKey)。然后比较(Pair::getValue);
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()));
}
entries.sort(Comparator.<Pair<String, Integer>, String>comparing(p -> p.getKey()).thenComparingInt(Pair::getValue));