草庐IT

comparator

全部标签

java - 可以确定 Java 比较器的进度吗?

我正在使用Comparator实现对大量对象进行排序。根据此集合中对象的类型,排序需要几毫秒到半分钟。有什么方法可以在排序时确定Comparator的进度吗?我想为用户可视化。Collections.sort(sorted,newComparator(){publicintcompare(Object[]o1,Object[]o2){/*doit...*/returnorder;}}该集合可能包含简单的短字符串对象、日期对象或(最坏情况)需要在排序时获取数据的CLOB对象。 最佳答案 您可以通过编写一个计算“全局”变量的比较器来做到

java - 类型安全地创建要传递给 Comparator.comparing() 的 Function 实例

假设我有一个具有以下签名的方法:>Comparatormethod(Map>comparatorFunctionMap)该方法接受一个函数映射(带有字符串键)并创建一个Comparator结果(如何并不重要)。映射值是Function的实例,这样它们就可以直接传递给Comparator.comparing().如何以类型安全的方式填充此map?假设我有一个类Person具有属性name和age(以及他们的setter/getter)。当我执行以下操作时:Map>map1=newHashMap();map1.put("name",Person::getName);method(map1)

java - 如何使用比较器对重复的字符串进行排序?

假设我有一个包含worker的列表,每个worker都有3个字段:它的名字、他工作的部门(可以只是部门的名称或类(class)部门的对象)和他的薪水。ElvisSoftwareEngineering1000SambaMechanicalEngineering2000BambaIndustrialEngineering3000BisliMedicalEngineering4000KinderElectricalEngineering1000ElvisSoftwareEngineering9999现在我想按名称对它们进行排序并将结果放入队列中。然后将队列放入map中,从下到上排序所以排序后

Java:如何使用不同的 equals 定义执行列表操作?

Java:如何使用不同的equals定义执行列表操作?我有两个通用POJO列表。我需要根据比较列表中POJO的不同方式对列表执行一些集合操作。例如,如果我的POJO具有以下结构:publicclassGenericPojo{privateStringid;privateStringaddress;privateStringcity;privateStringcountry;privateStringextraDetails;}(使用适当的getter和setter)给定List1和List2,我将如何找到:List1-List2(如果ID相等,GenericPojo类就相等)List1

java - Comparable 接口(interface)前无接口(interface)词

这是细节,但我想知道为什么会这样。示例代码:Classklasa=Enum.class;for(Typet:klasa.getGenericInterfaces())System.out.println(t);程序输出:java.lang.Comparableinterfacejava.io.Serializable为什么在输出java.lang.Comparable之前没有接口(interface)词.是界面,是吗?在我看来输出应该是:**interface**java.lang.Comparableinterfacejava.io.Serializable比较特殊处理?

java - 转换为 Comparable,然后进行比较

我真的很想喜欢泛型,但到目前为止,它们造成的麻烦超过了任何好处。请告诉我我错了。我理解在使用非通用框架(Spring、Hibernate)时添加@SuppressWarnings("unchecked")的必要性。仅这一点就真正降低了泛型的值(value),因为要求将类传递给构造函数以避免删除的陷阱。然而,真正的刺似乎总是在类型转换。我通常会尝试一段时间来获得正确的语法,但随后放弃纯洁的尝试,添加一个@SuppressWarnings,然后继续我的生活。这是一个例子:我正在反射(reflection)一个bean以寻找两个实例之间的差异。一些属性实现Comparable使得(a.equ

Java TreeMap 自定义比较器奇怪的行为

我正在尝试创建一个带有排序键的Map,先按字母顺序排序,最后按数字排序。为此,我使用了带有自定义Comparator的TreeMap:publicstaticComparatorALPHA_THEN_NUMERIC_COMPARATOR=newComparator(){@Overridepublicintcompare(Stringfirst,Stringsecond){if(firstLetterIsDigit(first)){return1;}elseif(firstLetterIsDigit(second)){return-1;}returnfirst.compareTo(sec

Java 8 : implementing Comparable

我喜欢Comparator的新静态工厂方法,因为它们允许以非常简洁且不易出错的方式实现比较器。但是实现Comparable的推荐方法是什么?我们应该在Comparable实现中使用Comparators吗?publicMyClassimplementsComparable{...publicintcompareTo(MyClassother){ComparatornaturalOrderComparator=Comparator.comparing(MyClass::getFoo).thenComparing(MyClass::getBar);returnnaturalOrderCom

java - 比较器违反一般契约(Contract)

以下代码是DaveKoelle'sAlphanumComparator的编辑版本.编辑包含将空字符串排序到列表末尾的代码,或者在我的例子中是JTable的底部。问题是java.lang.IllegalArgumentException:Comparisonmethodviolatesitsgeneralcontract!发生。为了解决我的问题,我调查了它并找到了诸如比较器没有在正确位置的return0;之类的原因。我还在Javabugdatabase中找到了一条评论读Thesortingalgorithmusedbyjava.util.Arrays.sortand(indirectly

java - 如何让 Comparator.comparing 正确推断类型参数?

我有以下类(class):importjava.util.ArrayList;importjava.util.Comparator;importjava.util.List;importorg.apache.commons.lang3.tuple.Pair;publicclassSorter{privateList>dtoPairs=newArrayList();publicSorter(){Comparator>bySize=Comparator.comparing(Pair::getLeft);Comparator>byName=Comparator.comparing(p->p.