Разделение одной таблицы на несколько таблиц на основе столбцов с использованием скорости
Хорошо, ниже приведен код, который у меня есть. Здесь мы читаем карту из объекта JAVA и заполняем столбцы, основываясь на ключе и значениях карты. Карта объектов Java имеет вид
HashMap<HashMap<String, Object>>
,
В требуемой таблице столбцы будут равны количеству внешних хэш-карт. Количество строк будет равно количеству Стинга / Объектов во внутренней хэш-карте.
Ниже приведен код, который генерирует таблицу. Как описано выше, количество столбцов в таблице будет зависеть от значений в Java-объекте. Проблема, с которой мы сталкиваемся, заключается в том, что если значение в hashmap больше 10, генерация PDH приводит к потере данных.
<table style="font-family:Arial;font-size:xx-small;color:black" width="100%" border="0" cellspacing="0" cellpadding="0">
#set ($allLegs = $ConfirmationObject.getAllLegs())
#set ($i = 1)
<tr>
<td valign="top" width="30%"> </td>
#foreach($legSzie in $allLegs.keySet())
<td valign="top" width="30%" align="left"><b>Leg $i</b></td>
#set ($i=$i+1)
#end
<tr><td></td></tr>
<td valign="top" width="10%" align="right"> </td>
</tr>
<td colspan="1">
<table style="font-family:Arial;font-size:xx-small;color:black" width="100%" border="0" cellspacing="0" cellpadding="0">
#set ($map = $ConfirmationObject.getLegMap(1))
#foreach($key in $map.keySet())
<tr>
<td valign="top" width="60%">$key </td>
</tr>
#end
</table>
</td>
#foreach($legString in $allLegs.keySet())
<td colspan="1">
<table style="font-family:Arial;font-size:xx-small;color:black" width="100%" border="0" cellspacing="0" cellpadding="0">
#set ($legMap = $allLegs.get($legString))
#foreach($legKey in $legMap.keySet())
<tr>
<td >$legMap.get($legKey)</td>
</tr>
#end
</table>
</td>
#end
</table>
Ожидание: возможно ли разделить данные на разные таблицы, когда значение столбца достигнет 3?
так, например, рассмотрим сценарий, где таблица выглядит
LEG 1 LEG 2 LEG 3 LEG 4 LEG 5
A 12 13 14 15 16
B 12 13 14 15 16
C 12 13 14 15 16
D 12 13 14 15 16
E 12 13 14 15 16
Как мы можем разделить это как
LEG 1 LEG 2 LEG 3
A 12 13 14
B 12 13 14
C 12 13 14
D 12 13 14
E 12 13 14
LEG 4 LEG 5
A 15 16
B 15 16
C 15 16
D 15 16
E 15 16
2 ответа
#set ($allLegs = $ConfirmationObject.getAllLegs())
#set ($columns = $allLegs.keySet())
#set ($maxCols = 3)
#set ($groups = ($columns.size() + $maxCols - 1)/$maxCols)
#set ($lastGroup = $groups - 1)
#foreach ($group in [0..$lastGroup])
#if($group >0 )
<br>
<br>
#end
<table style="font-family:Arial;font-size:xx-small;color:black" width="100%" border="0" cellspacing="0" cellpadding="0">
#set ($allLegs = $ConfirmationObject.getAllLegs())
#set ($i = (($group*$maxCols)+1))
#set ($groupLegs = $ConfirmationObject.getGrouplLegSet($group, $maxCols))
<tr>
<td valign="top" width="30%"> </td>
#foreach($legSzie in $groupLegs.keySet())
<td valign="top" width="30%" align="left"><b>Leg $i</b></td>
#set ($i=$i+1)
#end
<td></td>
<td valign="top" width="10%" align="right"> </td>
</tr>
<td colspan="1">
<table style="font-family:Arial;font-size:xx-small;color:black" width="100%" border="0" cellspacing="0" cellpadding="0">
#set ($map = $ConfirmationObject.getLegMap(1))
#foreach($key in $map.keySet())
<tr>
<td valign="top" width="60%">$key </td>
</tr>
#end
</table>
</td>
#foreach($legString in $groupLegs.keySet())
<td colspan="1">
<table style="font-family:Arial;font-size:xx-small;color:black" width="100%" border="0" cellspacing="0" cellpadding="0">
#set ($legMap = $allLegs.get($legString))
#foreach($legKey in $legMap.keySet())
<tr>
<td >$legMap.get($legKey)</td>
</tr>
#end
</table>
</td>
#end
</table>
#end
Здесь мы написали Java-метод getGrouplLegSet ($ group, $ maxCols). Метод будет просто возвращать подмножество hashmap на основе group и maxCols. Так, например, если группа равна 0, будут возвращены значения от 0 до 2, если значение группы равно 1, будут возвращены подкарты от 3 до 5 и т. Д.
Вы можете попробовать что-то вроде этого:
#set ($columns = $allLegs.keySet().toArray())
#set ($maxCols = 3)
#set ($groups = ($columns.size() + $maxCols - 1)/$maxCols)
#set ($lastGroup = $groups - 1)
#foreach ($group in [0..$lastGroup])
<table style="font-family:Arial;font-size:xx-small;color:black" width="100%" border="0" cellspacing="0" cellpadding="0">
#set ($firstCol = $maxCols*$group )
#set ($lastCol = $firstCol + $maxCols - 1)
#if ($lastCol >= $columns.size())
#set ($lastCol = $columns.size() - 1)
#end
<tr>
<th></th>
#foreach ($col in [$firstCol..$lastCol])
<th>$columns[$col]</th>
#end
</tr>
#set ($rows = $allLegs.get($columns[$firstCol]).keySet())
#foreach($row in $rows)
<tr>
<th>$row</th>
#foreach ($col in [$firstCol..$lastCol])
#set ($legMap = $allLegs.get($columns[$col]))
<td>$legMap.get($row)</td>
#end
</tr>
#end
</table>
#end