使用java流将String [] str = {“a”,“b”,“c”,“d”,“e”,“f”}转换为{a = b,c = d,e = f}的映射

时间:2017-10-17 00:53:30

标签: java java-8 java-stream

我有以下代码来实现这个要求,但无法解决使用流,我不知道如何在管道中增加i

String[] str = {"a","b","c","d","e","f"};
    Map<String, String> strMap = new HashMap<>();
    int i = 0;
    while(i< str.length && i +1 < str.length) {
        strMap.put(str[i],str[i+1]);
        i +=2;          
    } 

2 个答案:

答案 0 :(得分:4)

您无法使用简单的str流进行此操作,但您可以使用索引流模仿循环:

Map<String, String> strMap = IntStream.range(0, str.length - 1)
        .filter(i -> i % 2 == 0)
        .boxed()
        .collect(Collectors.toMap(i -> str[i], i -> str[i + 1]));

答案 1 :(得分:3)

这有点像黑客攻击,但您可以使用IntStream生成索引(在0和数组长度之间),过滤掉奇数索引,然后使用{{ 1}}填充forEach - 喜欢,

strMap

哪些输出(根据要求)

String[] str = { "a", "b", "c", "d", "e", "f" };
Map<String, String> strMap = new HashMap<>();
IntStream.range(0, str.length).filter(i -> i % 2 == 0)
        .forEach(i -> strMap.put(str[i], str[i + 1]));
System.out.println(strMap);