我有以下对象数据,如下所示
[{
name = john , id=1,email id : [abc@gmail.com,def@gmail.com,ghi@gmail.com]
},{
name = joy, id=2,email id : [jkl@gmail.com,mno@gmail.com,pqr@gmail.com]
}]
我希望将以下内容转换为Map 如
{john=[abc@gmail.com,def@gmail.com,ghi@gmail.com]},{joy= [jkl@gmail.com,mno@gmail.com,pqr@gmail.com]}
在Java中我将如何实现这一目标。
请帮助我
答案 0 :(得分:0)
没有简单的方法可以做到这一点,如此多的硬手动工作有很多错误的可能性,你可以使用它。只要您的数据完全如图所示那么这应该有用。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Person {
int id;
String name;
List<String> emails;
public static Person parse(String s) throws Exception {
Person person = new Person();
person.name = s.substring(0, s.indexOf(",")).replaceAll(".+= ?", "");
s = s.substring(s.indexOf(",") + 1, s.length());
person.id = Integer.parseInt(s.substring(0, s.indexOf(",")).replaceAll(".+= ?", "").trim());
s = s.substring(s.indexOf(",") + 1, s.length());
s = s.replaceAll(".+: ?", "").replaceAll("[ \\[\\]]", "");
person.emails = Arrays.asList(s.split(","));
return person;
}
public static List<Person> parseMany(String s) throws Exception {
List<Person> people = new ArrayList<Person>();
while (true){
int openBracket = s.indexOf("{");
int closeBracket = s.indexOf("}");
if(closeBracket == -1){
break;
}
people.add(parse(s.substring(openBracket, closeBracket)));
s = s.substring(closeBracket + 1, s.length());
}
return people;
}
public static void main(String[] args) throws Exception {
String s = "[{name = john , id=1,email id : [abc@gmail.com,def@gmail.com,ghi@gmail.com]},{name = joy, id=2,email id : [jkl@gmail.com,mno@gmail.com,pqr@gmail.com]}]";
List<Person> people = parseMany(s);
Map<String, List<String>> map = new HashMap<String, List<String>>();
for(Person person : people){
map.put(person.name, person.emails);
}
System.out.println(map);
}
}
<强>输出:强>
{joy = [jkl@gmail.com,mno @ gmail.com,pqr @ gmail.com],约翰 = [abc @ gmail.com,def @ gmail.com,ghi @ gmail.com]}
注意:强>
我没有费心去评论这段代码,因为问题没有遵循任何标准程序。