当前位置: 首页 > 面试题库 >

Java-排序-变量比较器

刘狐若
2023-03-14
问题内容

我正在尝试根据用户输入对对象列表进行排序。如何使sort方法实现变体比较器?

例:

List<S3ObjectSummary> objectSummaryList = getObjectSummaries();
objectSummaryList.sort(Comparator.comparing(S3ObjectSummary::getKey);

如何根据需要根据getKey / getModified /其他任意属性进行上述排序?


问题答案:

如果所有“键”都将链接到getter方法,则可以在函数中使用键/ getter的静态映射:

注意:我们将不得不使用原始类型,Comparable因为我们不能使用不同的类型Functions<S3ObjectSummary, Comparable<T>>(即使所有的获取方法都将返回Comparable<X>对象,X也会有所不同)

Map<String, Function<S3ObjectSummary, Comparable>> map = new HashMap<>();
map.put("key", s3 -> s3.getKey());
map.put("modified", s3 -> s3.getModified());
// other entries

然后使用:

objectSummaryList.sort(Comparator.comparing(map.get(compareByKey)));


 类似资料:
  • “StringComparator”在“arrays.sort(b,new StringComparator());”出货量和预期的一样。 但当我使用默认排序(步骤如下),然后按“StringComparator”排序时,bug显示: “Arrays.Sort(a);Arrays.Sort(a,new StringComparator());”

  • 问题内容: 我有一个简单的类,其中包含一个字符串(名称)和一个整数(年龄)。应存储在集合中的对象不得具有双名值,并且应根据年龄的降序进行排序。第一个代码示例删除所有双精度名称,但不包含第二个排序条件: 下一个示例比较器将对其余对象集进行排序,该对象集不包含任何重复名称: 第二个比较器正确地根据对象的年龄值对它们进行排序,但是它允许使用重复名称,我不明白,因为外部if语句已经检查了两个对象的名称是否

  • 问题内容: 是否有Java开源比较器可以按多个字段比较bean以进行多列排序?每列可以按升序或降序排序。 对于单列排序,可以与一起使用。 我知道编写此功能非常简单,但是如果已经编写并测试过轮子,那么重新发明轮子有什么好处? 问题答案: 我是几个月前写的。 只需从此类继承并重写doCompare-Method。然后使用设置链中的下一个比较器。比较器在此链中出现的越早,就越“重要”。 编辑: 另请参阅

  • 下一个示例比较器将对不包含任何双名的对象的其余集合进行排序: 第二个比较器正确地根据对象的年龄值对其进行排序,但它允许使用双重名称,我不明白这一点,因为外部的if-语句已经检查了两个对象的名称是否相等。为什么会这样?

  • 我的代码如下所示: 我想使用比较器按降序对数组排序,但它总是显示 第14行:错误:未找到适合排序的方法(int[],int,int,匿名比较器) 有人能指出问题出在哪里吗?非常感谢!

  • 我想学习java中的比较器,我在网上找到了这个很好的例子,我的问题是如何更改这个代码,使宠物的名字按年龄和降序排列,以便最大的是第一个,最小的是最后一个?