填充地图<>使用Java8风格

时间:2017-09-08 23:31:22

标签: java java-8 hashmap java-stream

我喜欢这种功能风格。所以想使用Java-8将String转换为Map<Position, Character>(如果可以在java-8中完成)。其中:

  • 应为字符Position

  • 应该Character忽略空格。

String str = "a b c\nc d e\na b c"; // note \n (new line) 

Map<Position, Character> map;
     // key     value
     // (0,0)   'a'
     // (0,1)   'b' <= skip spaces
     // (0,2)   'c'
     // (1,0)   'c' <= reset at new line
     // ...
     // (2,2)   'c'

到目前为止,我想出了这样的smth(可能是错的):

map = str.chars()
         .filter(ch -> ch != ' ')
         .reduce((Map<Position, Character> m, int ch) -> {
             // put magic here. 
             m.put(new Position(x, y), ch);
         });

很抱歉,如果问了类似的问题,但我的1小时搜索没有给我足够明确的答案。

1 个答案:

答案 0 :(得分:0)

这是一个选项:

Map<Integer, Char> stringMap = IntStream.range(0, str.length()).filter(x -> ! str[x].equals(' ')).collect(Collectors.toMap(x -> x, y -> str[y]) 
// Code should be something like this. Not sure it compiles as is

我的java有点生疏,但我认为语法仍然有效。

我有点担心你为什么要这样做而不使用String::charAt。你在寻找可变性吗? Java Strings针对内存效率进行了优化