java - 在 Java 8 Lambda-Stream 中使用字符串数组作为值并使用 Enum 作为键创建 Hashmap

标签 java lambda java-8 java-stream

我正在尝试在 Java 8 中使用 Lambda-Stream 实现以下逻辑。(请参见下面的示例方法)。我以旧的方式在下面写下逻辑,这样可以很容易地创建解决方案而不是我的 Lambda 版本 - 流设置更复杂和错误,因为没有得到最终结果。

public static HashMap<EnumObj,String> getHashMapData(String…args){
     int i = 0;
     HashMap<EnumObj,String> hashObj = new HashMap<EnumObj,String>();
     if(args.length <= 6){
           for(String arg : args){
                if(i == 0){
                     hashObj.put(EnumObj.FIRSTNAME,args[i]);
                }else if(i == 1){
                     hashObj.put(EnumObj.LASTNAME,args[i]);
                }else if{……….
                ………….
                }else if(i == 4 && args.length < 5){
                      hashObj.put(EnumObj.COMPANY,args[i]);
                      hashObj.put(EnumObj.COMANYBOSS,args[i+1]);
                }else if(i == 5 && args.length < 6){
                      hashObj.put(EnumObj.COMANYBOSS,args[i]);
                }
           }  
     }
}

请忽略 if/else 的任何循环逻辑,如果像以前一样失去了这种循环逻辑。虽然我一直在尝试我的逻辑思想,但如果其他人已经成功完成或者有建议以最简单的方式实现它,我就会得到一些想法。

到目前为止,我使用了两个 Stream 来通过 Collections.toMap 选项来创建新 map 。但是它有 Stream with in a stream 并且更复杂。

如果我自己找到了解决方案,则会发布该答案,否则将投票选出最佳解决方案。

最佳答案

如评论中所述,此代码不正确。我假设您有一个可变长度的参数数组,并且每个参数都对应于 EnumObj 的一个枚举常量。

如果是这样,您只需要一个简单的 for 循环:

Map<EnumObj, String> result = new HashMap<>();
EnumObj[] enums = EnumObj.values();
for (int i = 0; i < args.length; i++) {
    result.put(enums[i], args[i]);
}

你可以对流做同样的事情,但你不会得到任何东西,IMO:

Map<EnumObj, String> result = new HashMap<>();
EnumObj[] enums = EnumObj.values();
IntStream.range(0, args.length)
         .forEach(i -> result.put(enums[i], args[i]));

关于java - 在 Java 8 Lambda-Stream 中使用字符串数组作为值并使用 Enum 作为键创建 Hashmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33429465/

相关文章:

java - 如何创建行和列的字符串索引以及单元格的 boolean 值表?

java - 使用用户输入添加 BigDecimals

java - IntelliJ : Error:java: error: release version 5 not supported

c# - 为什么方法类型推断无法推断类型参数?

c++ - 编译器方差 : type of `this` when value-captured in mutable lambda defined in a const member function

java - Java8 中的字符串操作

java - 无法使用带有错误的 MAVEN 构建 - 无法执行目标 org.apache.maven.plugins :maven-compiler-plugin:3. 1:编译

java-8 - 在 Java8 中对 else 条件使用相同的流

java - 当我将 Jdk 1.6 更新到 Jdk 1.8 时,出现以下错误 : The type java. lang.CharSequence 无法解析

c++ - 如何使用自定义删除器复制 unique_ptr