如何优化代码以减少类似的重复参数
How can I optimize the code reducing the similar repetitive parameters
我想优化此代码而不是使用 td(String.valueof(dataset.get()))
多次。我对 lambda 表达式的使用比较陌生,想不出比这更好的方法
代码需要优化
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)))
))
)
)
不知道您使用的是什么库,因此假设 tr()
和 td()
return 类型:
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)
))
)
我明白了,您正在使用 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...
,然后对 myList
的每个元素再次执行 each
。
如果您确定 columnHeaders
和 myList
是类型集合(如 List<String>
),那么您可以这样做:
return table(thead(tr(each(columnHeaders, TagCreator::header))),
tbody(each(myList,
dataset -> each(dataset, TagCreator::td))));
我想优化此代码而不是使用 td(String.valueof(dataset.get()))
多次。我对 lambda 表达式的使用比较陌生,想不出比这更好的方法
代码需要优化
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)))
))
)
)
不知道您使用的是什么库,因此假设 tr()
和 td()
return 类型:
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)
))
)
我明白了,您正在使用 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...
,然后对 myList
的每个元素再次执行 each
。
如果您确定 columnHeaders
和 myList
是类型集合(如 List<String>
),那么您可以这样做:
return table(thead(tr(each(columnHeaders, TagCreator::header))),
tbody(each(myList,
dataset -> each(dataset, TagCreator::td))));