私は私Map<Key,ArrayList<Value>>
のデータを この値は複数の行にすることができます。だから私はセルテーブルの中にセルテーブルを置くことを考えていましたが、それは私のヘッダーに影響を与えます(外側のセルテーブルの列の数はちょうど2になるので)そしてソートにも影響します。
また、マップを直接渡すと、ListDataProvider
行数がマップの行数であると想定されますが、そうではありません。
では、これを行う最善の方法は何ですか?
私は私Map<Key,ArrayList<Value>>
のデータを この値は複数の行にすることができます。だから私はセルテーブルの中にセルテーブルを置くことを考えていましたが、それは私のヘッダーに影響を与えます(外側のセルテーブルの列の数はちょうど2になるので)そしてソートにも影響します。
また、マップを直接渡すと、ListDataProvider
行数がマップの行数であると想定されますが、そうではありません。
では、これを行う最善の方法は何ですか?
次のようなクラス RowObject を使用することをお勧めします。
class RowObject {
private final Key key;
private final Value value;
RowObject(Key key, Value value) {
this.key = key;
this.value = value;
}
/* Getters omitted */
}
次に、マップを RowObjects のリストに変換し、リストをデータ プロバイダーにフィードします。
List<RowObject> rowObjects = new ArrayList<RowObject>();
for (Entry<Key, ArrayList<Value>> entry : map.entrySet()) {
for (Value value : entry.getValue()) {
rowObjects.add(new RowObject(entry.getKey(), value));
}
}
ListDataProvider<RowObject> dataProvider = new ListDataProvider<RowObject>();
dataProvider.addDataDisplay(cellTable);
dataProvider.setList(rowObjects);
次のように列を追加します。
Column column = new Column<RowObject, String>(new TextCell()) {
@Override
public String getValue(RowObject object) {
return getStringValueFor(object);
}
};
cellTable.addColumn(column);