简体   繁体   English

如何在java 8中转换Multiple If Else阶梯

[英]How do convert Multiple If Else ladder in java 8

I am having Array of Strings in the form of我有以下形式的Strings Array

[field1, Expected: 60,got: 70,field2, Expected: 80,got: 90, field3, Expected: 90,got: 70]

From this array i am constructing it into List<HashMap<String,String>> Here is what i tried so far从这个array我将它构造成List<HashMap<String,String>>这是我到目前为止所尝试的

   List<HashMap<String,String>> getErroMap(String [] err){
    List<HashMap<String,String>> listErrorMap = new ArrayList<HashMap<String,String>>();
    HashMap<String,String> errorMap=null;
    byte count = 0;
    for (String arr : err) {
        if(count == 0 ) {
             errorMap = new HashMap<String, String>();
             errorMap.put("object",arr.replaceAll(".import", ""));
        }else if (count >0) {
            String key = count ==1?"Expected":"Found";
            if(arr.contains(":")) {
                 String[] tokens = arr.split(":");
                 errorMap.put(key, tokens[1]);
            }else {
                 errorMap.put(key, arr);
            }
        }
        if(count >= 2) {
            listErrorMap.add(errorMap);
            count = 0 ;
        }else {
            count++;
        }
    }
    return listErrorMap;
}

And getting desired output并获得所需的输出

 [{'object':field1,"Expected":60,"Found":70},{'object':'field2','Expected':80,'Found':90  ..and so on ]

SInce i am new to Java 8 i guess i am doing a lot of code to achieve simple thing.因为我是Java 8新手,所以我想我正在做很多代码来实现简单的事情。 How do improve this using java 8 .如何使用java 8改进这一点。

To get your desired result, you would need to return List<List<HashMap<String,String>>> , which is not ideally clean.要获得所需的结果,您需要返回List<List<HashMap<String,String>>> ,这并不理想。

It's better to make a custom class as suggested, and create List<CustomClass> .最好按照建议创建自定义类,并创建List<CustomClass> For example:例如:

public class myClass{
    public String obj;
    public int expected;
    public int found;

    public myClass(String obj, int expected, int found){
        this.obj = obj;
        this.expected = expected;
        this.found = found;
    }
}

Then, you can create a loop:然后,您可以创建一个循环:

private List<myClass> convertToMap(String[] info){
    ArrayList<myClass> newList = new ArrayList<myClass>();
    for(int i = 0; i < info.length; i += 3){
        if(i < info.length){
          newList.add(new myClass(info[i],
                      Integer.parseInt(info[i+1]), 
                      Integer.parseInt(info[i+2])));
        }
    }
    return newList;
}

The below is what you want?下面是你想要的?

private List<Map<String, String>> getErrorMap(String[] inputs) {
    if (inputs.length % 3 != 0) {
        return new ArrayList<>();
    }
    final AtomicInteger counter = new AtomicInteger(0);
    return Arrays.stream(inputs)
        .collect(Collectors.groupingBy(s -> counter.getAndIncrement() / 3))
        .values()
        .stream()
        .map(strings -> {
            Map<String, String> map = new HashMap<>();
            map.put("object", strings.get(0));
            map.put("Expected", strings.get(1).split(":")[1]);
            map.put("Found", strings.get(2).split(":")[1]);
            return map;
        }).collect(Collectors.toList());
}

Input:输入:

{"field1", "Expected: 60", "got: 70", "field2", "Expected: 80", "got: 90", "field3", "Expected: 90", "got: 70"}

Output:输出:

[{Expected= 60, Found= 70, object=field1}, {Expected= 80, Found= 90, object=field2}, {Expected= 90, Found= 70, object=field3}]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM