做某事有固定的步骤,因此我将其提取为常用方法,请参见下文
private static <T>void commonMethod(GetListAction getListAction, Function<T, Integer> tObjectFunction) {
List<T> list = getListAction.action();
List<Integer> proIdList = list.stream().map(tObjectFunction).collect(Collectors.toList());
List<ProEntity> proEntityList = getProEntityListByProIdList(proIdList);
// do something with proEntityList
// ...
}
interface GetListAction<T> {
List<T> action();
}
现在在差异情况下,我按以下方式调用通用方法
commonMethod(()->getFooList(), Foo::getProId);
commonMethod(()->getBarList(), Bar::getProId);
但是我仍然想知道是否可以删除commonMethod
中的第二个参数?
private static <T>void commonMethod(GetListAction getListAction)
但是在这种情况下,如何从列表中获取proIdList
List<Integer> proIdList = list.stream().map(???).collect(Collectors.toList());
答案 0 :(得分:2)
摆脱splt_val['\n'_k]("test")
的一种方法是使Function<T, Integer> tObjectFunction
成为接口的子类型。例如:
T
interface Action {
Integer getProdId();
}
和Foo
将实现此接口,并且由于它们已经具有Bar
方法,因此应该很容易。
这将允许您将方法声明为
getProdId()