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

如何在Java8中转换多个If-Else梯形图,java,java-8,Java,Java 8,我拥有字符串的数组,格式为 [field1, Expected: 60,got: 70,field2, Expected: 80,got: 90, field3, Expected: 90,got: 70] 从这个数组我将它构建到列表中 List<HashMap<String,String>> getErroMap(String [] err){ List<HashMap<String,String>> listErrorMap =

我拥有
字符串的
数组
,格式为

[field1, Expected: 60,got: 70,field2, Expected: 80,got: 90, field3, Expected: 90,got: 70]
从这个
数组
我将它构建到
列表中

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

由于我是
Java8
新手,我想我正在编写大量代码来实现简单的事情。如何使用
java8

改进此功能要获得所需的结果,您需要返回
List
,这不是理想的干净结果

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

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;
}
私有列表转换映射(字符串[]信息){
ArrayList newList=新的ArrayList();
对于(int i=0;i
要获得您想要的结果,您需要返回
列表
,该列表并不理想

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

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;
}
私有列表转换映射(字符串[]信息){
ArrayList newList=新的ArrayList();
对于(int i=0;i
以下是您想要的

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

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

下面是你想要的

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

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

与其说是一个
列表
,不如把它转换成
列表
?这是一个简单的用例来处理,所以不用考虑使用类,从
映射的列表中,我可以读取所有对象并写入PDF。你能在
getErrorMap(String[]err)中发布一些err输入吗
?我投票决定结束这个问题,因为它在上更合适。@TongChen是的,这是问题的第二行。与其说是
列表
,不如把它转换成
列表
?这是一个简单的用例,所以不要考虑使用类,从这个
Map
列表中,我可以读取所有对象并写入PDF。你能在
getErrorMap(String[]err)
中发布一些err输入吗?我投票结束这个问题,因为它在上更合适。@TongChen是的,这是问题的第二行。