Vaadin - добавление столбцов в сетку с карты

Я хочу отображать данные в сетке vaadin, но я хочу динамически создавать столбцы для каждого значения из списка customAttributes. Моя модель данных более или менее выглядит так

      Item
    name: String
    localization: Localization
    visible: Boolean
    customAttributes: List<CustomAttribute>

CustomAttribute
    name: String
    value: String

Каждый объект имеет одинаковый набор типов атрибутов, различаются только значения. Пользователь может вручную определить новые типы атрибутов.

Как я могу создать эту сетку? В настоящее время я делаю это следующим образом:

      grid.setColumns("name", "visible");
grid.addColumn(v -> v.getLocalization().getName()).setHeader("Localization");

Но я понятия не имею о динамическом создании столбцов для каждого настраиваемого атрибута.

1 ответ

Как уже было написано в комментариях, вы можете перебирать имена атрибутов, предполагая, что у вас есть их список (или набор). Одна небольшая проблема заключается в том, что вам нужно сделать это таким образом, чтобы значения внутри обратного вызова были фактически окончательными.

      attributeNames.forEach(name -> {
  grid.addColumn(item -> item.getCustomAttributes().get(name))
    .setHeader(name);
});

Если вы не знаете имена атрибутов напрямую, но загружаете все элементы в память, а не лениво загружаете их, то вы можете найти уникальные имена, перебирая все элементы:

      items.stream().flatMap(item -> item.getCustomAttributes().keySet().stream())
  .distinct().forEach(<same loop as in the previous example>);
Другие вопросы по тегам