Tag: 比较器

Java PriorityQueue Comparator – 如何/何时排序?

我正在初始化一个优先级队列,如: strategy = new FuelPriority(); incoming = new PriorityQueue(1, strategy); 我的Comparator类的代码是: public class FuelPriority implements Comparator { public int compare(Object o1, Object o2) { Vehicle a1 = (Vehicle) o1; Vehicle a2 = (Vheicle) o2; return Integer.compare(a1.getFuelLevel(), a2.getFuelLevel()); } } 运行模拟后,元素根本没有排序 – 它们是随机的; 我在FuelPriority类的compare方法中设置了一个断点,但根本没有调用它。 我在这里错过了什么吗?

在Java中,通过key.length()对哈希映射进行排序

我有这样的hashmap: HashMap map = new HashMap(); map.put(“java”,4); map.put(“go”,2); map.put(“objective-c”,11); map.put(“c#”,2); 现在我想按照它的密钥长度对这个映射进行排序,如果两个密钥长度相等(例如go和c#都是长度2),那么按照alphba顺序排序。 所以我期望得到的结果是这样的: 打印结果:objective-c,11 java,4 c#,2 go,2 这是我自己的玩具,但它根本不起作用…… HashMap map = new HashMap(); map.put(“java”,4); map.put(“go”,2); map.put(“objective-c”,11); map.put(“c#”,2); Map treeMap = new TreeMap( new Comparator() { @Override public int compare(String s1, String s2) { return s1.length().compareTo(s2.length()); } } ); 实际上’compareTo’方法显示为红色(无法编译)….请有人帮我一些代码示例…我有点困惑如何使用比较器类来自定义比较对象…

比较器必须覆盖超类方法

我正在制作一个TreeMap并希望以降序排序。 我创建了以下比较器: Comparator descender = new Comparator() { @Override public int compare(String o1, String o2) { return o2.compareTo(o1); } }; 我像这样构造TreeMap: myMap = new TreeMap(descender); 但是,我收到以下错误: The method compare(String, String) of type new Comparator(){} must override a superclass method 我从未完全弄清楚仿制药,我做错了什么?

当Comparator有两个抽象方法时,它如何成为一个function界面?

在Java 8中,引入了@FunctionalInterface注释来表示任何具有一个抽象方法作为function接口的接口。 引入它的原因之一是指示用户(程序员),lambda表达式可以在function接口的上下文中使用。 Comparator接口使用@FunctionalInterface注释。 但是,两种方法都是抽象的。 int compare(T o1, T o2); 和 boolean equals(Object obj); 在FunctionalInterface的文档中,它被明确提到为 从概念上讲,function界面只有一种抽象方法。 这里的equals方法不被认为是抽象的吗?

Java 8 Comparator比较不链

假设我有一个Pair类 public class Pair { public P p; public Q q; public Pair(P p, Q q) { this.p = p; this.q = q; } public int firstValue() { return ((Number)p).intValue(); } public int secondValue() { return ((Number)q).intValue(); } } 我希望对它进行排序,首先是第一个值,然后是第二个值。 现在’如果我这样做 List<Pair> pairList = new ArrayList(); pairList.add(new Pair(1, 5)); pairList.add(new Pair(2, 2)); pairList.add(new Pair(2, 22)); […]

Java Collections.sort – 帮我删除未经检查的警告

List questions = new ArrayList(); questions.addAll(getAllQuestions()); //returns a set of Questions Collections.sort(questions, new BeanComparator(“questionId”)); //org.apache.commons.beanutils.BeanComparator 在Java 1.5下,上述工作正常,只是’new BeanComparator(“questionId”)’生成一个未经检查的警告。 我不喜欢警告。 有没有办法可以为BeanComparator提供类型,还是必须使用@SuppressWarnings(“unchecked”) ?

读取文本文件并存储在hashmap中。 然后按顺序排序

文件是这样的: name1 134.2 name2 456.7 name3 265.3 … … 我读了文本文件并存储在HashMap之后,我想按顺序排序(按最高值),但问题是因为我在String中对值进行排序,我无法比较它。 那么..有没有办法将textfile的值以double或integerforms放入hashmap? import java.io.*; import java.util.*; class Test { public static void main(String[] args) throws FileNotFoundException { Scanner scanner = new Scanner(new FileReader(“score.txt”)); HashMap map = new HashMap(); while (scanner.hasNextLine()) { String[] columns = scanner.nextLine().split(“\t\t”); map.put(columns[0], columns[1]); } System.out.println(map); } }

按嵌套映射的值对外部映射进行排序

按照以前保留外键和内键的嵌套映射中的列表大小对外部映射Map<String, Map<String, List>>进行排序 。

使用Comparator进行Java FX表列排序不起作用

在Java FX中,我想在已排序的TableView中显示此模型: public class ProfilZuordnungTableRowModel { private int id; private double kundenwert; private String kundenwertFormatted; private BooleanProperty selected; } 我想将表列排序与“Kundenwert”列集成。 显示的值应该是属性“kundenwertFormatted”(String),并且应该使用属性“kundenwert”(Double)进行排序。 所以我写了一个比较器: class ProfilZuordnungTableRowModelComparator implements Comparator { @Override public int compare(ProfilZuordnungTableRowModel t, ProfilZuordnungTableRowModel t1) { return t.getKundenwert() < t1.getKundenwert() ? -1 : t.getKundenwert() == t1.getKundenwert() ? 0 : 1; } } 根据我的理解,这个比较器应该以下列方式使用: TableColumn kundenwertColumn = […]

没有实现接口的所有方法

我尝试在eclipse上复制下面的代码。 我收到一个错误,告诉我必须实现所有inheritance的方法(因为Comparator是一个接口)。 new Comparator(){}必须实现inheritance的抽象方法Comparator.reversed() 。 有许多这些方法,我想要覆盖的唯一方法是比较。 我是否必须实现所有其他方法,或者有没有办法指定我不需要实现它们? 我知道由于接口的契约性质,我必须这样做,但是如果我只需要更改一个方法怎么办? static Map sortByValue(Map map) { List list = new LinkedList(map.entrySet()); Collections.sort(list, new Comparator() { public int compare(Object o1, Object o2) { return ((Comparable) ((Map.Entry) (o1)).getValue()) .compareTo(((Map.Entry) (o2)).getValue()); } }); Map result = new LinkedHashMap(); for (Iterator it = list.iterator(); it.hasNext();) { Map.Entry entry = (Map.Entry)it.next(); result.put(entry.getKey(), entry.getValue()); […]