Java 如何优化代码以减少类似的重复参数

Java 如何优化代码以减少类似的重复参数,java,lambda,java-8,j2html,Java,Lambda,Java 8,J2html,我想优化这段代码,而不是使用td(String.valueof(dataset.get())mutliple时间。我对lambda表达式的用法比较陌生,无法找到比这更好的方法 代码需要优化 return table(thead(tr(each(columnHeaders, header -> th(String.valueOf(header))))), tbody(each(myList, dataset -> tr(td(String.valueOf(datase

我想优化这段代码,而不是使用
td(String.valueof(dataset.get())
mutliple时间。我对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()
返回类型进行了假设:

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));
}

我明白了,您正在使用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, TagCreator::header))),
             tbody(each(myList, 
                        dataset -> each(dataset, TagCreator::td))));
但如果你稍微把它说出来,可能会读得更好:

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

如果确保
columnheader
myList
是键入的集合(如
List
),则可以执行以下操作:

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, TagCreator::header))),
             tbody(each(myList, 
                        dataset -> each(dataset, TagCreator::td))));

这应该创建什么作为输出?是什么阻止您编写循环语句?似乎您想要创建DSL。Imho Java不是最好的语言。有多少参数是“tr”方法有哪些?你到底想优化什么?代码样式还是性能?如果是后者,你有什么性能问题?你在使用什么库?每个方法都是什么?我们可以提供更好的帮助。如果数据集Iterable,那么你可以对其使用forEach,并像你那样做使用
columnHeaders
可能是j2html,因为HTML生成器库带有这个问题。因此我猜这不是他的库,因此您的想法可能对他不起作用。