有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何在Java8中转换多个If-Else梯形图

我有ArrayStrings的形式

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

从这个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;
}

并获得期望的产出

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

因为我是新来的Java 8我想我做了很多代码来实现简单的事情。如何使用java 8来改进这一点


共 (2) 个答案

  1. # 1 楼答案

    要获得所需的结果,需要返回List<List<HashMap<String,String>>>,这不是理想的干净结果

    最好按照建议创建一个自定义类,并创建List<CustomClass>。 例如:

    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;
        }
    }
    

    然后,可以创建一个循环:

    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;
    }
    
  2. # 2 楼答案

    下面是你想要的

    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());
    }
    

    输入:

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

    输出:

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