Преобразовать список массивов в список объектов - Java - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть репозиторий, который выполняет запрос и возвращает список массивов в соответствии с заданными параметрами.Я хочу преобразовать этот список в список объектов.Я новичок в Java, и я занимался этой проблемой в течение нескольких дней.Теперь вот мой репозиторий:

@Repository
public class AlarmDynamicSelection {

  private EntityManagerFactory emf;

  @PersistenceUnit
  public void setEntityManagerFactory(EntityManagerFactory emf) {
    this.emf = emf;
  }

  public List<Object> alarmSelection(List<String> fields, Map<String, Object> filters){
    EntityManager em = this.emf.createEntityManager();
    CriteriaBuilder builder = em.getCriteriaBuilder();

    CriteriaQuery<Object> criteria = builder.createQuery( Object.class );
    Root<ActiveAlarm> root = criteria.from( ActiveAlarm.class );
    root.join("alarmClass", JoinType.LEFT);
    root.join("networkElement", JoinType.LEFT);

    List<Selection<?>> selectList = new LinkedList();
    for (String item : fields) {
      selectList.add(root.get(item));
    }

    criteria.multiselect(selectList);

    ArrayList<Predicate> predicates = new ArrayList<>();
    if (filters.get("details") != null) {
      predicates.add(builder.like(builder.upper(root.get("details")), "%" + filters.get("details").toString().toUpperCase() + "%"));
    }
    if (filters.get("networkElement") != null) {
      predicates.add(builder.like(builder.upper(root.join("networkElement").get("label")),
          "%" + filters.get("networkElement").toString().toUpperCase() + "%"));
    }

    criteria.where(builder.and(predicates.toArray(new Predicate[0])));

    List<Object> results = em.createQuery( criteria ).getResultList();  

    return results;
  }
}

Параметры:

"fields": ["id", "details", "networkElement"], 
"filters": {"id":[312,34], "details":"a" }

Результат:

[
    [
        123,
        "adasd",
        {
            "id": 20,
            "label": "test"
        }
    ],
    [
        34,
        "dfakrgfA",
        {
            "id": 1,
            "label": "net"
        }
    ],
    [
        312,
        "dgfsesadfsafdf",
        {
            "id": 1,
            "label": "net"
        }
    ]
]

Я хочу преобразовать этот результат в следующее:

[
  {
    "id": 123,
    "details": "adasd",
    "networkElement": {
      "id": 20,
      "label": "test"
    }
  },
  {
    "id": 34,
    "details": "dfakrgfA",
    "networkElement": {
      "id": 1,
      "label": "net"
    }
  },
  {
    "id": 312,
    "details": "dgfsesadfsafdf",
    "networkElement": {
      "id": 1,
      "label": "net"
    }
  }
]

Ключи объектов должны исходить из field параметр

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...