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

仅在Java中对键进行多图排序

冯敏达
2023-03-14
问题内容

我想有一个c.g.c.c.Multimap仅基于键排序的。值不应该排序。我尝试使用番石榴来构建某些东西TreeMultimap,但是由于值类型未实现,所以无法使用它Comparable

public class MyObject /* doesn't implement Comparable */ {
  private String name;
  private int score;
  // Getters/setters are implemented
  public static Function<MyObject,Integer> myObjectToScore {
    @Override public Integer apply (MyObject o) { return o.score; }
  }
  public static Multimap<Integer,MyObject> indexOnScore(Iterable<MyObject> i) {
    Multimap<Integer,MyObject> m = Multimaps.index(i, myObjectToScore());
    // Do the sort of the keys.
    return m;
  }
}

我曾考虑过要获得一个SortedSet密钥,然后遍历排序集中的每个密钥以获取各种值,但是我希望使用Guava中的现有(尚未发现)功能,而不是使用这种
hack

注意:我不会制作MyObject工具,Comparable因为它与我的实际对象无关。

输入/输出示例:

Set<MyObject> s = Sets.newHashSet(
  new MyObject("a", 2),
  new MyObject("b", 3),
  new MyObject("c", 1),
  new MyObject("d", 3),
  new MyObject("e", 1)
); // Assuming constructor MyObject(String name, int score)

for (Map.Entry<Integer, MyObject> e: MyObject.indexedOnScore(s).entries()) {
  System.out.printf("%d -> %s%n", e.getKey(), e.getValue().getName());
}

印刷品:

1 -> c // or switched with line below
1 -> e
2 -> a
3 -> b // or switched with line below
3 -> d

问题答案:

Multimaps.index返回ImmutableListMultimap,因此创建后将无法对其进行排序。但是,您可以先为您创建排序后的副本,Iterable<MyObject>然后将其提供给Multimap.index
,以ImmutableListMultimap使事情保持与给出的顺序相同。

public static ImmutableMultimap<Integer, MyObject> indexOnScore(Iterable<MyObject> i) {
  List<MyObject> sorted = Ordering.natural().onResultOf(myObjectToScore())
      .sortedCopy(i);
  return Multimaps.index(sorted, myObjectToScore());
}

另一个选择可能是创建一个TreeMultimap并将Ordering.arbitrary()Comparator用作值。



 类似资料:
  • 问题内容: 我正在尝试使用TreeMap按日期键在Java中对地图进行排序。这是我的代码 将含有像(例如21-3-2013)以字符串格式和外观日期。问题在于,它仅在TreeMap(mp)中存储12个键值对(每月一个),而不是预期的103(i)。有任何想法吗 ? 问题答案: 请参阅http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDat

  • 问题内容: 这是一个非常基本的问题,我对Java并不是很好。我有一个Map,我想按排序顺序获取列表或某些键,以便可以对其进行迭代。 问题答案: 使用,这是接口的实现。它按排序顺序显示其密钥。 如果您使用的另一个Map实现没有按照您的喜好进行排序,则可以将其传递给的构造函数,以使用排序键创建新的Map。 一个与实现接口的任何类型的键一起使用的键,将它们按“自然”顺序放置。对于不需要的键或不需要的自然

  • 问题内容: 我有可能需要按1-n键排序的大文件。其中一些键可能是数字键,有些则可能不是数字键。这是一个固定宽度的柱状文件,因此没有定界符。 有没有一种很好的方法可以用Unix排序呢?使用一个键,就像使用“ -n”一样简单。我已经阅读了手册页并简短地搜索了Google,但是没有找到一个很好的例子。我将如何实现这一目标? 注意:由于文件大小可能,我排除了Perl。这将是不得已的办法。 问题答案: 使用

  • 问题内容: 我有一个字典,其中每个键都引用一个int值。根据值将键排序到列表中的最佳方法是什么? 问题答案: mydict = {‘a’:1,’b’:3,’c’:2} >>> sorted(mydict, key=lambda key: mydict[key]) [‘a’, ‘c’, ‘b’]

  • 问题内容: 在主题函数返回的代码中迭代返回的映射时,键未按顺序显示。 我如何才能使键按顺序排列/对地图进行排序,以使键按顺序排列并且值对应? 这是代码。 问题答案: 在围棋博客:去映射在行动中有极好的说明。 当使用范围循环在地图上进行迭代时,未指定迭代顺序,并且不能保证每次迭代之间都相同。从Go 1开始,运行时间会随机化映射迭代顺序,因为程序员依赖于先前实现的稳定迭代顺序。如果需要稳定的迭代顺序,

  • 问题内容: 我试图通过多个键对多维数组进行排序,但我不知道从哪里开始。我看了uasort,但不确定如何根据需要编写函数。 我需要按状态排序,然后按event_type排序,然后按日期排序。 我的数组如下所示: 问题答案: 你需要 从PHP 5.5.0开始: 就是现在: