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

时间:2019-03-22 19:23:37

标签: java lambda java-8 j2html

我想优化此代码,而不是使用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)))

      ))
  )
)

2 个答案:

答案 0 :(得分: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

如果您确保columnHeadersmyList是键入的集合(例如List<String>),则可以执行以下操作:

return table(thead(tr(each(columnHeaders, TagCreator::header))),
             tbody(each(myList, 
                        dataset -> each(dataset, TagCreator::td))));

答案 1 :(得分:0)

不知道您使用的是哪个库,因此已经假设了err <- produceMessage prod message return $ case err of Nothing -> Right () Just theError -> Left theError 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));
}