我是Java新手。 我在ArrayList中有一个Java POJO。 我想将该POJO的某些特定字段连接到String中,并将值存储为键,将对象本身存储为Hash Map中的值。 我不想连接所有字段,只是特定的字段。 Java类是在运行时使用库从Json模式生成的。所以在POJO中声明一个方法不会工作,因为有100个类。 我可以在运行时上课。我也可以在运行时获取字段。我想写一个泛型函数,我传递对象,函数将返回该对象的所有连接字段。
答案 0 :(得分:0)
在您的POJO中,声明一个方法
public void getKey(){
return fielda + fieldb + fieldc;
}
并且该方法应该返回这些字段的连接字符串
然后你就可以添加到你的地图
了map.put(pojo.getKey(), pojo);
您也可以这样做(没有getKey方法):
String key = pojo.getField1 + pojo.getField2 + pojo.getFiel3;
map.put(key, pojo)
答案 1 :(得分:0)
覆盖该类的getKey()
方法。
假设您有一名班级员工
Class Employee{
private int empId;
private String firstname;
private String lastname;
private String city;
private String areaCode;
public void getKey(){
return this.empid+this.areaCode;
}
}
现在可以调用此方法生成所需的密钥并将其添加到Hashmap中。
HashMap<String,Employee> list= new HashMap<String,Employee>
list.add(emp.getKey(),emp);
答案 2 :(得分:0)
以下是使用流的示例。
class POJO {
private String field1;
private String field2;
private String field3;
public POJO(String field1, String field2, String field3) {
this.field1 = field1;
this.field2 = field2;
this.field3 = field3;
}
}
List<POJO> list = Arrays.asList(
new POJO("f11", "f12", "f13"),
new POJO("f11", "f12", "f23"),
new POJO("f31", "f32", "f33")
);
// below is all you need
Map<String, POJO> map = list.stream().collect(Collectors.toMap(
pojo -> pojo.field1 + pojo.field2, // construct the key using pojo fields
pojo -> pojo, // store pojo as value
(pojo1, pojo2) -> pojo1 // if 2 pojos have the same key, which one you would like to keep
));
答案 3 :(得分:0)
您可以使用匿名类包装原始POJO,其唯一责任是正确实施equals/hashCode
合同。像这样(简化):
public static void main(String[] args) {
A a1 = new A("John", 33);
A a2 = new A("April", 25);
Map<AKey, A> map = new HashMap<>();
map.put(key(a1), a1);
map.put(key(a2), a2);
A a3 = new A("John", 28);
map.put(key(a3), a3);
System.out.println(map);
}
interface AKey {
String getKey();
}
static AKey key(final A a)
{
return new AKey() {
@Override public String getKey() { return a.name; }
@Override public int hashCode() { return getKey().hashCode(); }
@Override
public boolean equals(Object obj) {
return Objects.equals(getKey(), ((AKey)obj).getKey());
}
@Override public String toString() { return getKey(); }
};
}
static class A
{
public String name;
public int age;
public A(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "A{" + "name='" + name + '\'' + ", age=" + age + '}';
}
}