Как я могу оптимизировать код, уменьшая аналогичные повторяющиеся параметры - PullRequest
0 голосов
/ 22 марта 2019

Я хочу оптимизировать этот код вместо использования td(String.valueof(dataset.get())) раз в несколько раз. Я относительно новичок в использовании лямбда-выражений и не могу найти лучший способ, чем этот

Код должен быть оптимизирован

  return table(thead(tr(each(columnHeaders, header -> 
  th(String.valueOf(header))))),
  tbody(each(myList, dataset ->
  tr(td(String.valueOf(dataset.get(0))), 
  td(String.valueOf(dataset.get(1))), 
  td(String.valueOf(dataset.get(2))), 
  td(String.valueOf(dataset.get(3))), 
  td(String.valueOf(dataset.get(4))),
  td(String.valueOf(dataset.get(5))), 
  td(String.valueOf(dataset.get(6))), 
  td(String.valueOf(dataset.get(7))), 
  td(String.valueOf(dataset.get(8))), 
  td(String.valueOf(dataset.get(9))),
  td(String.valueOf(dataset.get(10)))

      ))
  )
)

Ответы [ 2 ]

2 голосов
/ 22 марта 2019

Понятно, вы используете j2html.

Я думаю, вы можете сделать это в одну строку, как это:

return table(thead(tr(each(columnHeaders, header -> th(String.valueOf( tbody(each(myList, dataset -> each(dataset, data -> td(data)))))

Но это, вероятно, читается лучше, если вы немного разберетесь:

return table(thead(tr(each(columnHeaders, 
                           header -> th(String.valueOf(header))))),
             tbody(each(myList, 
                        dataset -> each(dataset, data -> td(String.valueOf(data))))));

Все, что я здесь сделал, находится внутри вашего звонка на tbody, вы говорите each(myList..., затем просто повторите each для каждого элемента myList.

Если вы убедились, что columnHeaders и myList являются типизированными коллекциями (например, List<String>), то вы можете сделать что-то вроде этого:

return table(thead(tr(each(columnHeaders, TagCreator::header))),
             tbody(each(myList, 
                        dataset -> each(dataset, TagCreator::td))));
0 голосов
/ 22 марта 2019

Не знаю, какую библиотеку вы используете, поэтому сделали предположение для tr() и td() типов возвращаемых данных:

private TR trOf(List<?> dataset, int startIdx, int endIdxInclusive) {
    List<TD> tds = IntStream.rangeClosed(startIdx, endIdxInclusive).map(i -> tdOf(dataset, i)).collect(Collectors.toList());

    return tr(tds.toArray(new TD[0]));
}

private TD tdOf(List<?> dataset, int idx) {
    return td(String.valueOf(dataset.get(idx));
}

Тогда:

return table(thead(tr(each(columnHeaders, header -> 
th(String.valueOf(header))))),
tbody(each(myList, dataset ->
trOf(dataSet,0,10)

    ))
)
...