迭代字符串映射和不固定值的整数列表
Iterate Map of String and List of integer with not fixed values
我有一个字符串和列表映射counts.I想要迭代它并想在对象中设置映射值。
counts.put("ABC", Arrays.asList(1,2,3));
counts.put("XYZ", Arrays.asList(1,2));
counts.put("PQR", Arrays.asList(1));
counts.put("IJK", Arrays.asList());
map值是list类型,可以是1,2,3等,也可以是空但不会超过3,short size不能超过2
我写了如下代码:
for (Map.Entry<String,List<Integer>> count : counts.entrySet()) {
InventoryOwnerManagerResult result = new InventoryOwnerManagerResult();
InventoryOwnerPresence presence = new InventoryOwnerPresence();
switch (count.getValue().size()) {
case 1:
presence.setConfigCount(count.getValue().get(0));
presence.setWebsitesCount(0);
presence.setSourcesCount(0);
break;
case 2:
presence.setConfigCount(count.getValue().get(0));
presence.setWebsitesCount(count.getValue().get(1));
presence.setSourcesCount(0);
break;
case 3:
presence.setConfigCount(count.getValue().get(0));
presence.setWebsitesCount(count.getValue().get(1));
presence.setSourcesCount(count.getValue().get(2));
break;
default:
presence.setConfigCount(0);
presence.setWebsitesCount(0);
presence.setSourcesCount(0);
break;
}
result.setInventoryOwnerPresence(presence);
}
这是非常老派的做法,也不合适。
还有其他方法吗?
您可以将开关替换为以下内容:
List<Integer> counts = count.getValue();
presence.setConfigCount(counts.size() > 0 ? counts.get(0) : 0);
presence.setWebsiteCount(counts.size() > 1 ? counts.get(1) : 0);
presence.setSourcesCount(counts.size() > 2 ? counts.get(2) : 0);
如果 numbers
有超过 3 个元素,这将有不同的表现;此解决方案仅丢弃第 4 个及以后的元素,您的解决方案将丢弃所有元素。但这并不重要,因为您永远不会获得超过 3 个元素。
您选择哪个选项是个人喜好。开关清晰但冗长,三元表达式简洁但对某些人来说可能有点难以阅读。就性能而言,switch 的性能可能更好,但我怀疑您是否真的看到了差异。
我有一个字符串和列表映射counts.I想要迭代它并想在对象中设置映射值。
counts.put("ABC", Arrays.asList(1,2,3));
counts.put("XYZ", Arrays.asList(1,2));
counts.put("PQR", Arrays.asList(1));
counts.put("IJK", Arrays.asList());
map值是list类型,可以是1,2,3等,也可以是空但不会超过3,short size不能超过2
我写了如下代码:
for (Map.Entry<String,List<Integer>> count : counts.entrySet()) {
InventoryOwnerManagerResult result = new InventoryOwnerManagerResult();
InventoryOwnerPresence presence = new InventoryOwnerPresence();
switch (count.getValue().size()) {
case 1:
presence.setConfigCount(count.getValue().get(0));
presence.setWebsitesCount(0);
presence.setSourcesCount(0);
break;
case 2:
presence.setConfigCount(count.getValue().get(0));
presence.setWebsitesCount(count.getValue().get(1));
presence.setSourcesCount(0);
break;
case 3:
presence.setConfigCount(count.getValue().get(0));
presence.setWebsitesCount(count.getValue().get(1));
presence.setSourcesCount(count.getValue().get(2));
break;
default:
presence.setConfigCount(0);
presence.setWebsitesCount(0);
presence.setSourcesCount(0);
break;
}
result.setInventoryOwnerPresence(presence);
}
这是非常老派的做法,也不合适。
还有其他方法吗?
您可以将开关替换为以下内容:
List<Integer> counts = count.getValue();
presence.setConfigCount(counts.size() > 0 ? counts.get(0) : 0);
presence.setWebsiteCount(counts.size() > 1 ? counts.get(1) : 0);
presence.setSourcesCount(counts.size() > 2 ? counts.get(2) : 0);
如果 numbers
有超过 3 个元素,这将有不同的表现;此解决方案仅丢弃第 4 个及以后的元素,您的解决方案将丢弃所有元素。但这并不重要,因为您永远不会获得超过 3 个元素。
您选择哪个选项是个人喜好。开关清晰但冗长,三元表达式简洁但对某些人来说可能有点难以阅读。就性能而言,switch 的性能可能更好,但我怀疑您是否真的看到了差异。