我有一个HashMap pdf = new HashMap<String, String>()
,其密钥遵循某种惯例:
PilotFirstname Bob
PilotName Jones
PilotDOB 12/12/2001
PilotAddress 123 Any Street
CopilotFirstname Jim
CoPilotName Jones
CopilotDOB 13/02/1997
CoPilotAddress 456 Any Street
注意密钥是如何形成为<role><property>
的。每个人都有角色前缀,每个人(姓名,名字,DOB,地址)有4个详细信息可以进入POJO。前缀是Pilot,CoPilot,CabinCrew1到6。
我开始编写代码。这些字段来自PDF:
List fields = new ArrayList(); // list to store PDF fields
fields = acroForm.getFields(); // Get PDF fields
Iterator fieldsIter = fields.iterator(); // Iterator for the fields
// Create Hashmap "pdf" storing PDF field names & values
pdf = new HashMap<String, String>();
while (fieldsIter.hasNext()) {
PDField field = (PDField) fieldsIter.next();
// Next line removes braces for dropdowns and any leading whitespace
pdf.put(field.getPartialName(), field.getValueAsString().replaceAll("[\\[\\]]", "").trim());
}
public void createPerson(Map<String, String> pdf, String role) {
Person person = new Person();
person.setLastName(pdf.get(role +"Name"));
person.setFirstName(pdf.get(role +"FirstName"));
person.setAddress(pdf.get(role +"Address"));
person.setDateOfBirth(pdf.get(role +"DOB"));
System.out.println("Stop");
}
什么是在hashmap中循环遍历每个人的最佳方式(需要识别前缀(角色))。
我需要将每个人的详细信息提取到一个人POJO中,每个角色一个POJO。
如何处理?我应该遍历Hashmap,寻找以&#34; Name&#34;结尾的字段。然后在hashmap中搜索具有相同前缀的其他四个字段之一?
环境是Java 7。
答案 0 :(得分:0)
这可以作为基于每个角色提取属性的起点:
import java.util.*;
import java.util.stream.*;
public class MyClass {
public static class Pojo {
public Pojo(String property1, String property2) { }
}
public static void main(String args[]) {
Map<String, String> myMap = new HashMap<>();
myMap.put("role1property1", "a");
myMap.put("role1property2", "b");
myMap.put("role2property1", "c");
myMap.put("role2property2", "d");
List<String> roles = myMap.keySet().stream()
.filter(s -> s.endsWith("property1"))
.map(s -> s.substring(0, s.indexOf("property1")))
.collect(Collectors.toList());
for (String role: roles)
{
// do something with it
String a = myMap.get(role + "property1");
String b = myMap.get(role + "property2");
}
// or
List<Pojo> pojos = roles.stream()
.map(role -> new Pojo(myMap.get(role + "property1"), myMap.get(role + "property2")))
.collect(Collectors.toList());
}
}