草庐IT

comparator

全部标签

java - 为什么 Function.identity() 会破坏类型具体化,而 t -> t 却不会?

在Java8lambdas,Function.identity()ort->t找到答案似乎暗示Function.identity()几乎总是等同于t->t。但是,在下面看到的测试用例中,将t->t替换为Function.identity()会导致编译器错误。这是为什么?publicclassTestcase{publicstaticCollectorcomparatorOrdering(FunctionkeyMapper,FunctionvalueMapper,ComparatorkeyComparator,ComparatorvalueComparator){returnnull;}

java - 具有可变数量的方法引用的通用对象比较方法用于比较

我经常需要比较某种类型的实例是否相等,但我不需要比较所有内容,只需比较某些字段即可。我通常这样做:Comparatorc=Comparator.comparing(SomeType::getNumber).thenComparing(SomeType::getType).thenComparing(SomeType::getSite).thenComparing(SomeType::getAddition).thenComparing(SomeType::getImportantFlag);if(c.compare(old,new)==0){...}因为我必须经常这样做,所以我想知道是

【Java多线程】面试常考——锁策略、synchronized的锁升级优化过程以及CAS(Compare and swap)

目录1、锁的策略1.1、乐观锁和悲观锁 1.2、轻量级锁和重量级锁1.3、自旋锁和挂起等待锁1.4、普通互斥锁和读写锁1.5、公平锁和非公平锁1.6、可重入锁和不可重入锁 2、synchronized内部的升级与优化过程2.1、锁的升级/膨胀2.1.1、偏向锁阶段2.1.2、轻量级锁阶段2.1.3、重量级锁阶段2.2、锁消除2.3、锁粗化3、CAS(Compareandswap)3.1、CAS的应用3.1.1、实现Atomic原子类3.1.2、实现自旋锁3.1.3、CAS的ABA问题1、锁的策略加锁过程中,处理冲突的过程中,涉及到的一些不同的处理方式,就叫锁的策略。1.1、乐观锁和悲观锁 乐观

java - 了解 Java 中的 Collections.reverseOrder() 方法

考虑sort的重载定义之一方法来自Array类:publicstaticvoidsort(T[]a,Comparatorc)逆序排列数组的常用方法是传递Comparator由Collections.reverseOrder()返回作为此方法的第二个参数。让我们看看Collections.reverseOrder()的实现来自openjdk7的方法:publicstaticComparatorreverseOrder(){return(Comparator)ReverseComparator.REVERSE_ORDER;}ReverseComparator类:privatestaticc

Java 8 Comparator比较不链接

假设我有一个Pair类publicclassPair{publicPp;publicQq;publicPair(Pp,Qq){this.p=p;this.q=q;}publicintfirstValue(){return((Number)p).intValue();}publicintsecondValue(){return((Number)q).intValue();}}我希望先按第一个值,然后按第二个值对其进行排序。现在'如果我这样做List>pairList=newArrayList();pairList.add(newPair(1,5));pairList.add(newPai

Java - List<Integer> 排序、比较器和溢出

我有以下代码按降序对列表进行排序Listlist=Arrays.asList(Integer.MAX_VALUE,-1);list.sort((x,y)->y-x);System.out.println(list)结果是[-1,2147483647]现在,我知道我不应该写y-x,因为它会导致溢出问题。但问题是为什么输出是这样的?我相信输出会是[2147483647,-1]因为-1-Integer.MAX_VALUE是-2147483648,仍然是一个负整数,广告该操作似乎不受溢出问题的影响。我做错了什么? 最佳答案 正如您在Orac

java - 列表::包含比较器

有什么方法(方法、lambda或优雅的构造)可以根据给定的比较器在列表中查找元素?我写了一个这样的方法:privatestaticbooleancontains(Listlist,Titem,Comparatorcomparator){returnlist.stream().anyMatch(listItem->comparator.compare(listItem,item)==0);}但我希望用更优雅的东西替换它。我不想添加任何依赖项,所以没有Guava、“commons”等。我真的在寻找一种在Java8中执行此操作的漂亮方法。编辑:一些我认为更优雅的例子(这里是使用代码)://s

Java Map 按值排序

我正在寻找排序的方法Map按值(value)观。我找到了thispost,它解决了我的排序问题,但不完全是。根据帖子,我写了以下代码:importjava.util.*;publicclassSort{staticclassValueComparatorimplementsComparator{Mapbase;ValueComparator(Mapbase){this.base=base;}@Overridepublicintcompare(Stringa,Stringb){if(base.get(a)>=base.get(b)){return1;}else{return-1;}}}p

java - 如何链接和应用一系列比较器?

我有一个未分类项目流和一个比较器流。我想通过使用“thenComparing”(Multisort)将所有比较器应用到流中是否有比以下代码更优雅的方法来实现此目的?Streamunsorted=...;Streamcomparators=...;ComparatorcompareFunc=comparators.reduce(null,(a,b)->{if(a==null){returnb;}else{returna.thenComparing(b);}});Streamresult=unsorted.sorted(compareFunc); 最佳答案

java - Java 中的范围查找

假设,我有一个未排序的重叠范围数组。每个range只是一对整数begin和end。现在我想查找给定的key是否至少属于ranges之一。可能,我还必须知道它所属的范围。我们可以假设ranges数组占用~1M并适合内存。我正在寻找一种简单的算法,它仅使用标准JDK集合,不使用任何3d方库和特殊数据结构,但运行速度相当快。你有什么建议? 最佳答案 按自定义Comparator对范围进行数字排序,然后为每个键k构建一个单元素范围[k,k]并执行binarysearch对于此范围,使用不同的Comparator.Comparator用于搜索