我有一个列表
List<FeatureHolder> featureHolderList;
由FeatureHolder对象组成
public class FeatureHolder {
private String flag;
private String value;
}
现在我需要从featureSetList中提取Map。当然,解决方案是微不足道的:
Map<String, String> map = new HashMap<>();
for(FeatureHolder fh: featureHolderList){
map.put(fh.getFlag(), fh.getValue());
}
问题是,在Java 7中有更好(更短)的方法吗?我已经研究过例如Google Collections和方法Maps.uniqueIndex,但以这种方式执行转换所需的代码会更长,而且可读性更低。
答案 0 :(得分:4)
使用Java 7,您的代码很好。
或者您可以使用Java 8
Map<String, Item> map = list.stream()
.collect(Collectors.toMap(Item::getKey,
item -> item));
答案 1 :(得分:2)
我经常会发现是否使用番石榴的决定。根据Guava自己的caveats docu,如果没有净代码行或明显的性能优势,您应该避免使用Guava。
但是,在你的情况下,我没有看到一个简单的方法来创建你的番石榴地图,因为Maps.uniqueIndex只有一个键映射函数,但没有值映射函数。这意味着,您最终会得到Map<String, FeatureHolder>
类型的地图。
如果您可以使用Java 8,Collectors.toMap可能是一个选项,但在我的选项中没有什么不能击败您的“普通旧3行易读代码”解决方案,所以请坚持它<!/强>
答案 2 :(得分:0)
你的代码很好,你不可能在Java 7中做得更短。只是为了使它更优化你可以为HashMap
添加一个默认容量,如果你期望所有的标志都不同:
Map<String, String> map = new HashMap<>(fhList.size());
它有点长,但可能会更快,因为没有必要进行重组。
答案 3 :(得分:0)
使用Google收藏夹
Map<String, String> map = Maps.uniqueIndex(yourList, Functions.toStringFunction());