首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中从列表中提取地图的最短方法

Java中从列表中提取地图的最短方法
EN

Stack Overflow用户
提问于 2015-06-02 09:41:01
回答 4查看 3.8K关注 0票数 1

我有一份名单

代码语言:javascript
复制
List<FeatureHolder> featureHolderList;

由FeatureHolder对象组成

代码语言:javascript
复制
public class FeatureHolder {
   private String  flag;
   private String  value;
}

现在我需要从featureSetList中提取地图。当然,解决办法是微不足道的:

代码语言:javascript
复制
    Map<String, String> map = new HashMap<>();
    for(FeatureHolder fh: featureHolderList){
        map.put(fh.getFlag(), fh.getValue());
    }

问题是,是否有一种更好(更短)的方法在Java7中这样做?我已经研究过例如Google和方法Maps.uniqueIndex,但是以这种方式执行转换所需的代码会长得多,而且可读性很低。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-06-02 10:37:47

我经常发现决定是否使用番石榴很难。根据番石榴自己的注意事项,如果没有网节省代码行的或明显的性能效益,您应该避免使用番石榴。

但是,在您的例子中,首先我没有看到用番石榴创建Map的简单方法,因为Maps.uniqueIndex只附带了一个键映射函数,但没有提供值映射函数。这意味着,您将得到一个Map<String, FeatureHolder>类型的映射。

如果您可以使用Java 8,Collectors.toMap可以是一个选项,但在我的选项中,没有什么比您的“简单易懂的3行简单代码”解决方案更好了,所以请坚持使用它!

票数 2
EN

Stack Overflow用户

发布于 2015-06-02 09:49:32

使用Java 7,您的代码很好。

或者您可以使用Java 8

代码语言:javascript
复制
Map<String, Item> map = list.stream()
                        .collect(Collectors.toMap(Item::getKey,
                                                  item -> item));
票数 5
EN

Stack Overflow用户

发布于 2015-06-02 09:44:42

您的代码很好,您不太可能在Java 7中做得更短。如果您期望所有的标志都不同,那么只需使其更加优化,就可以为HashMap添加默认容量:

代码语言:javascript
复制
Map<String, String> map = new HashMap<>(fhList.size());

这是有点长,但可能工作得更快,因为重新哈希将是不必要的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30592509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档