[英]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.