【发布时间】:2018-08-23 09:40:14
【问题描述】:
我想用 Map<String, Object> 项目填充我的 Vaadin 网格。
那是因为我像这样从数据库中获取数据(也许这是主要问题):
List<Map<String, Object>> result = jdbcTemplate.queryForList("select * from db", new Object[]{});
现在假设我创建了我的测试列表并用一些地图填充它:
List<Map<String, Object>> items = new ArrayList<>();
items.add(map);
items.add(map2);
我知道如何使用非动态数据模型,例如:
grid.addColumn(Person::getName).setCaption("Name");
grid.addColumn(Person::getAge).setCaption("Age");
但是如何创建我的 Grid 列以便它使用我的地图键? 我现在拥有的:
Grid<Map<String, Object>> grid = new Grid<>();
items.get(0).keySet().forEach(key ->
grid.addColumn(c -> c.get(key)));
grid.setItems(items);
它给了我输出:
b2 / b3 / b1
预期:
a1 / a2 / a3
b1 / b2 / b3
我不知道如何在列表中的每个地图中找到我的项目。还有为什么它不保持订单? 欣赏每一个答案!
【问题讨论】:
-
您确定这真的是设置问题,而不是项目/您的列表本身的问题吗?错误的顺序 (b2,b3,b1) 很可能是您的 keySet/map 没有被排序/排序(例如 HashMap)
-
1) 两个映射中的键是否相等?如果不是,那么对于您的第二个列表,每列的所有值都将为空。 2) Order in hash-maps is not guaranteed,如果你正在使用的话。请考虑添加一个sscce,它可以充分说明您在做什么。
-
谢谢,原来是物品问题!是的,由于缺乏排序,订单没有保留。我的 jdbcquery 呢?是不是有点恶心?
-
您对查询的讨厌的评论是一个全新的问题,与这个问题无关,因此通常需要一个单独的问题。 然而它也可能表明您需要在发布新问题之前阅读 SQL 查询简介、Spring JDBC 或您使用的任何框架。如果您已经熟悉这些概念并且有一个确切的问题,您可以发布一个问题,但是问一些如此通用的东西并不是真的适合 SO。如果我遗漏了什么,请告诉我。
-
不客气。好吧,您正在从表中选择 EVERYTHING,因此如果您有大量数据,则势必需要一段时间,在这种情况下,您可能需要考虑 lazy-loading of only the necessary to display data 而不是将其全部加载到内存中。