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

根据相关ID列表对集合重新排序

诸葛雅达
2023-03-14
问题内容

我有一个集合,一个对象(无序) 的ID 属性,一个(有序)列表 的IDID列表未排序
。我想在我的收藏夹中创建一个对象列表,并根据ID列表进行排序。

我在Guava或Apache Commons中没有看到用于此目的的方法-但这正是我想要的。具有良好实现的库函数。


问题答案:

听起来您的ID列表有自己的顺序;您不仅在使用自然顺序,对吗?

这是番石榴解决方案:

Ordering.explicit(idList)
     // constructs a "fluent Comparator" that compares elements in the
     // explicitly specified order
  .onResultOf(new Function<MyObject, Id>() {
    public Id apply(MyObject o) { return o.getId(); }
   }) // make this a Comparator<MyObject> that compares on IDs
  .sortedCopy(myObjects); // get the sorted copy of the collection

而已。没什么 (公开:我为番石榴做出了贡献。)

或者,如果您知道ID是唯一的,则可能会说

Map<Id, MyObject> objectsById =
  Maps.uniqueIndex(myObjects, GET_ID_FUNCTION); // defined elsewhere
List<MyObject> sortedObjects = Lists.newArrayList();
for (Id id : sortedIds) 
  sortedObjects.add(objectsById.get(id));


 类似资料:
  • 问题内容: 我确信这个问题以前可能已经被问过,但我似乎找不到正确的答案。如果我有两个清单 我正在尝试使用_list1重新排列_list2中的元素,以便它们完全匹配顺序。什么是最干净的方法?所需的输出: 很抱歉,如果这是重复的,但到目前为止,我只能使用压缩的sorted()方法找到数字列表的答案。 如果_list2是列表列表怎么办? 所需输出: 还有一个假设:如果我想使用_list1作为键对其他任何

  • 我有一个像这样的数据框- 我有一个这样的列表- 现在,我想根据列名列表对数据框进行排序 因此,新的数据框将有列名称-

  • 创建一个Java方法,它将列表作为参数(MasterList)并返回另一个列表(ExpectedList)。 列表中每个对象都有两个变量: null 我试图实现的逻辑是:当有多个ID相同的对象时,只考虑计数较大的特定对象。表示ID:有3个对象,所以我只考虑(ID:abc122,Count:20),因为在ID:abc122的对象中Count更高。在结束时,方法应返回

  • 我有一个程序有很多数据对象。每种方法都实现了可比性,并设置为从最高到最低(基于简单的长值)排序,包括重复的值。我希望这些对象存储在一个集合/列表中,这样我就可以遍历它,并在其各自的位置取出每个对象。 我已经研究过使用树集,但是这不允许重复,因此只保留具有相同值的多个对象中的一个。然后我找到了TreeMultiset,它可以保持元素具有相同的值。唯一的问题是,它只是存储同一对象的副本,而不是多个相等

  • 问题内容: Python通过按顺序查看元组的元素来对元组列表进行排序。由于集合是无序的,Python如何对集合列表进行排序? 编辑:帖子中的问题和可接受的答案较为笼统,给出的文件也很深入。我的问题不是重复的。 问题答案: 无论列表中有什么内容,元素的方法都是唯一参考的比较方法。对于集合,意味着“是”的适当子集,不足以定义总顺序。这就是为什么结果通常是不确定的。可能是原始列表的任何排列,与实现恰好适