我正在尝试在 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/