hashmultimap java_java – 如何按插入顺序迭代Multimap?

我不太确定你的需求(或具体用例),但我会猜测.其他答案建议使用Linked * Multimap或Immutable,但要使用Multimap获得所需的输出(如图所示),您将不得不创建一些花哨的Map(我将在稍后讨论)或者例如创建三个临时集合,第一个,第二个每个键的第三个值(如果您使用建议的Multimap实现之一,它们将按插入顺序排列).它最好是ListMultimaps之一,因为你可以迭代multimap.keySet()来获得索引可用值的列表:

final ListMultimap multimap = LinkedListMultimap.create();

// put values from question here

final List firstValues = Lists.newArrayList();

for (final String key: multimap.keySet()) {

firstValues.add(multimap.get(key).get(0));

}

System.out.println(firstValues);

// prints [value1, value11, value111]

// similar for multimap.get(key).get(1) and so on

但缺点是你必须为你创建三个列表,例如是什么使得这个解决方案相当不灵活.所以也许将{first,second,third}值集合放到Map>会更好,这让我想到了这一点:

也许你应该使用Table而不是?

表被设计为一个集合,它将一对有序的键(称为行键和列键)与一个值相关联,而这里更重要的是具有行和列视图.我在这里使用ArrayTable:

final ArrayTable table = ArrayTable.create(

ImmutableList.of("1", "2", "3"), ImmutableList.of(0, 1, 2));

table.put("1", 0, "value1");

table.put("1", 1, "value2");

table.put("1", 2, "value3");

table.put("2", 0, "value11");

table.put("2", 1, "value22");

table.put("2", 2, "value33");

table.put("3", 0, "value111");

table.put("3", 1, "value222");

table.put("3", 2, "value333");

for (final Integer columnKey : table.columnKeyList()) {

System.out.println(table.column(columnKey).values());

}

// prints:

// [value1, value11, value111]

// [value2, value22, value222]

// [value3, value33, value333]

我故意将String用于行键[1,2,3,…]实际上是整数(就像你在问题中所做的那样)和整数用于以0开头的列键([0,1,2,… ])使用List的get(int)在multimaps值的集合上显示与前一个示例的相似性.

希望这会有所帮助,主要是确定你想要的东西;)

附:我在这里使用ArrayTable,因为它有更简洁的方法来创建行/键值的固定集(宇宙),而不是ImmutableTable,但是如果不需要可变性,你应该使用它来改变一个 – ImmutableTable(和任何其他表实现)不没有columnKeyList()方法,但只有columnKeySet()执行相同的操作,但是对于ArrayTable来说速度较慢.当然应该使用ImmutableTable.Builder或ImmutableTable.copyOf(表).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值