从 Java 中的 List 中提取 Map 的最短方法
Shortest way to extract Map from List in Java
我有一个清单
List<FeatureHolder> featureHolderList;
由 FeatureHolder 对象组成
public class FeatureHolder {
private String flag;
private String value;
}
现在我需要从 featureSetList 中提取地图。解决方案当然很简单:
Map<String, String> map = new HashMap<>();
for(FeatureHolder fh: featureHolderList){
map.put(fh.getFlag(), fh.getValue());
}
问题是,在 Java7 中是否有更好(更短)的方法?我调查过例如Google 集合和方法 Maps.uniqueIndex,但以这种方式执行转换所需的代码会更长,而且可以说可读性较差。
你的代码很好,你不太可能在 Java 7 中把它写得更短。为了让它更优化一点,你可以为 HashMap
添加一个默认容量,如果你期望的话所有标志都不同:
Map<String, String> map = new HashMap<>(fhList.size());
它有点长,但可能会更快,因为不需要重新散列。
with Java 7,你的代码没问题。
或者您可以使用 Java 8
Map<String, Item> map = list.stream()
.collect(Collectors.toMap(Item::getKey,
item -> item));
使用Google 集合
Map<String, String> map = Maps.uniqueIndex(yourList, Functions.toStringFunction());
我常常觉得决定是否使用 Guava 并不困难。根据 Guava 自己的 caveats docu,如果没有 净节省代码行数 或明显的性能优势,您应该避免使用 Guava。
但是,在您的情况下,我首先没有看到使用 Guava 创建 Map 的简单方法,因为 Maps.uniqueIndex 仅带有键映射功能,但没有值映射功能。这意味着,您最终会得到类型为 Map<String, FeatureHolder>
.
的地图
如果你可以使用 Java 8,Collectors.toMap 可能是一个选项,但在我的选项中,没有什么比你的 "plain old 3 lines of easy to read code" 解决方案更好的了,所以 请坚持下去!
我有一个清单
List<FeatureHolder> featureHolderList;
由 FeatureHolder 对象组成
public class FeatureHolder {
private String flag;
private String value;
}
现在我需要从 featureSetList 中提取地图。解决方案当然很简单:
Map<String, String> map = new HashMap<>();
for(FeatureHolder fh: featureHolderList){
map.put(fh.getFlag(), fh.getValue());
}
问题是,在 Java7 中是否有更好(更短)的方法?我调查过例如Google 集合和方法 Maps.uniqueIndex,但以这种方式执行转换所需的代码会更长,而且可以说可读性较差。
你的代码很好,你不太可能在 Java 7 中把它写得更短。为了让它更优化一点,你可以为 HashMap
添加一个默认容量,如果你期望的话所有标志都不同:
Map<String, String> map = new HashMap<>(fhList.size());
它有点长,但可能会更快,因为不需要重新散列。
with Java 7,你的代码没问题。
或者您可以使用 Java 8
Map<String, Item> map = list.stream()
.collect(Collectors.toMap(Item::getKey,
item -> item));
使用Google 集合
Map<String, String> map = Maps.uniqueIndex(yourList, Functions.toStringFunction());
我常常觉得决定是否使用 Guava 并不困难。根据 Guava 自己的 caveats docu,如果没有 净节省代码行数 或明显的性能优势,您应该避免使用 Guava。
但是,在您的情况下,我首先没有看到使用 Guava 创建 Map 的简单方法,因为 Maps.uniqueIndex 仅带有键映射功能,但没有值映射功能。这意味着,您最终会得到类型为 Map<String, FeatureHolder>
.
如果你可以使用 Java 8,Collectors.toMap 可能是一个选项,但在我的选项中,没有什么比你的 "plain old 3 lines of easy to read code" 解决方案更好的了,所以 请坚持下去!