Java属性和lambda收集

And*_*nia 4 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;
Run Code Online (Sandbox Code Playgroud)

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

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

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

return mapProp;
Run Code Online (Sandbox Code Playgroud)

怎么写一个lambda表达式呢?

在此先感谢所有人

安德烈.

Luk*_*tor 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()
    ));
Run Code Online (Sandbox Code Playgroud)

  • @AndreaCatania我开始使用Oracle的javadoc和教程:http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html和http://docs.oracle.com/javase/tutorial/collections/streams /index.html这篇文章也非常有帮助:http://www.techempower.com/blog/2013/03/26/everything-about-java-8/ (2认同)

Old*_*eon 5

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

因为实现你的Properties扩展不需要做任何事情,除了:Hashtable<Object,Object>Map<K,V>

    Properties p = new Properties();
    Map<String,String> m = new HashMap(p);
Run Code Online (Sandbox Code Playgroud)

不明白为什么没有警告供此代码,因为它意味着从铸造Map<Object,Object>Map<String,String>是可以接受的,但我怀疑这是一个单独的问题.