来自Java POJO的concat特定字段并将其存储为键,并将该对象作为值存储在HashMap

时间:2017-12-22 15:22:06

标签: java hashmap pojo

我是Java新手。 我在ArrayList中有一个Java POJO。 我想将该POJO的某些特定字段连接到String中,并将值存储为键,将对象本身存储为Hash Map中的值。 我不想连接所有字段,只是特定的字段。 Java类是在运行时使用库从Json模式生成的。所以在POJO中声明一个方法不会工作,因为有100个类。 我可以在运行时上课。我也可以在运行时获取字段。我想写一个泛型函数,我传递对象,函数将返回该对象的所有连接字段。

4 个答案:

答案 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 + '}';
    }
}