Как я могу оптимизировать код, уменьшая аналогичные повторяющиеся параметры
Я хочу оптимизировать этот код вместо использования 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 ответа
Я вижу, вы используете 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))));
Не знаю, какую библиотеку вы используете, поэтому сделали предположение для 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)
))
)