Java属性和lambda收集

时间:2014-05-27 11:00:25

标签: java lambda java-8

我有一种方法以这种方式将属性转换为hashmap(我知道它错了)

Map<String, String> mapProp = new HashMap<String, String>();
Properties prop = new Properties();
prop.load(new FileInputStream( path ));     

prop.forEach( (key, value) -> {mapProp.put( (String)key, (String)value );} );

return mapProp;

我的想法是以这样的方式进行映射:

Properties prop = new Properties();
prop.load(new FileInputStream( path ));

Map<String, String> mapProp = prop.entrySet().stream().collect( /*I don't know*/ );

return mapProp;

如何写一个lambda表达式来做那个?

提前全部谢谢

安德烈。

3 个答案:

答案 0 :(得分:14)

使用Collectors.toMap

Properties prop = new Properties();
prop.load(new FileInputStream( path ));

Map<String, String> mapProp = prop.entrySet().stream().collect(
    Collectors.toMap(
        e -> (String) e.getKey(),
        e -> (String) e.getValue()
    ));

答案 1 :(得分:5)

实际上并不是一个答案,但对于路过的其他人来说可能是有用的。

由于Properties扩展Hashtable<Object,Object>实施Map<K,V>,您不需要做任何其他事情:

    Properties p = new Properties();
    Map<String,String> m = new HashMap(p);

不太确定为什么没有为此代码提供警告,因为它暗示从Map<Object,Object>Map<String,String>的演员阵容是可以接受的,但我怀疑这是一个单独的问题。

答案 2 :(得分:0)

对于那些想要使用forEach

的人
HashMap<String, String> propMap = new HashMap<>();
prop.forEach((key, value)-> {
   propMap.put( (String)key, (String)value);
});