我需要你的帮助:
我有一张地图:
Map<String, Object[]> data = new HashMap<String, Object[]>();
Object []数组由三元组构成:[String,String,Integer]
稍后,我将读取object []数组值,但我应该根据整数值打印它们。
我怎样才能以最好的方式做到这一点?
谢谢!
答案 0 :(得分:2)
首先,您必须从地图中提取值。然后,您可以使用本机java的sort方法实现,使用自定义比较器。
Map<String, Object[]> data = new HashMap<String, Object[]>();
List<Object[]> values = new ArrayList<Object[]>();
values.addAll(data.values());
Collections.sort(values, new Comparator<Object[]>()
{
@Override
public int compare(Object[] o1, Object[] o2)
{
// TODO implement me
// o1 less than o2 ? return -1
// o1 greater than o2 ? return 1
// o1 equals o2 ? return 0
}
});
在此示例中,您只需要实现compare方法。来自文档:
比较其订单的两个参数。返回一个负整数, 零或正整数,因为第一个参数小于,等于 到,或大于第二个。
答案 1 :(得分:2)
一种方法是使用流:
data.values().stream()
.sorted(Comparator.comparing(a -> (Integer)a[2]))
.forEachOrdered(a -> System.out.println(Arrays.toString(a)));
答案 2 :(得分:2)
使用Java 8对值进行排序。
final Map<String, Object[]> data = new HashMap<>();
data.put("foo", new Object[]{"A", "B", 1});
data.put("bar", new Object[]{"C", "D", 2});
data.put("baz", new Object[]{"E", "F", 3});
final Comparator<Object[]> comparator = (oa1, oa2) ->
((Integer) oa1[2]).compareTo((Integer) oa2[2]);
List<Object[]> sorted =
data.values().stream().sorted(comparator).collect(Collectors.toList());