Разделение одной таблицы на несколько таблиц на основе столбцов с использованием скорости

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

HashMap<HashMap<String, Object>>.

Требуемая таблица будет иметь столбцы, равные количеству внешней хэш-карты. Количество строк будет равно количеству Sting/Objects во внутренней хэш-карте.

Ниже приведен код, который генерирует таблицу. Как описано выше, количество столбцов в таблице будет зависеть от значений в 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">&nbsp;</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 

person Nayan Sonthalia    schedule 08.08.2017    source источник
comment
что такое ConfirmationObject?   -  person Maurice Perry    schedule 08.08.2017
comment
@MauricePerry: это просто название java-коллекции в форме hashmap‹hashmap‹string, object››   -  person Nayan Sonthalia    schedule 08.08.2017
comment
Итак, что же представляют собой методы getAllLegs и getLegMap?   -  person Maurice Perry    schedule 08.08.2017
comment
@MauricePerry: getAllLegs вернет внешнюю хэш-карту, которая будет соответствовать количеству столбцов таблицы. getLegMap вернет внутреннюю хеш-карту, которая будет соответствовать строкам таблицы. Спасибо за ваше время .. Ценю ваш взгляд на это.   -  person Nayan Sonthalia    schedule 08.08.2017


Ответы (2)


Вы можете попробовать что-то вроде этого:

#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
person Maurice Perry    schedule 08.08.2017
comment
Огромное спасибо за вашу помощь/руководство. Ваш ответ не решил мою проблему точно, но дал мне достаточно подсказок, чтобы наконец найти решение. Так что я все равно приму ваш ответ. Ниже вставлено мое решение, изменив ваш фрагмент кода. Еще раз спасибо дружище - person Nayan Sonthalia; 10.08.2017

    #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">&nbsp;</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). Метод просто вернет подмножество хэш-карты на основе группы и maxCols. Так, например, если группа равна 0, то будут возвращены значения от 0 до 2, если значение группы равно 1, то будут возвращены подкарты от 3 до 5 и так далее.

person Nayan Sonthalia    schedule 10.08.2017