我有两个非常相似的方法.所以我想把它简化为一种方法,但我不知道怎么做.
用法如下:
mapClassBToClassA("a list o ClassB objs", "a list of ClassA objs");
mapClassCToClassA("a list o ClassC objs", "a list of ClassA objs");
我想更改为:
mapClassToClassA("a list o ClassB objs", "a list of ClassA objs");
mapClassToClassA("a list o ClassC objs", "a list of ClassA objs");
方法一B = A
public void mapClassBToClassA(List<ClassB> b, List<ClassA> a){
Comparator<ClassB> sortFunc = Comparator.comparing(ClassB::getDate);
Collections.sort(b, sortFunc);
for (ClassA aObj : a){
LocalDate dateA = aObj.getDate();
ClassB bObjToUse = null;
for (ClassB bObj : b){
LocalDate dateB = bObj.getDate();
if (dateB.isAfter(dateA)){
break;
}
else {
bObjToUse = bObj;
}
}
if (bObjToUse != null){
aObj.setClassB(bObjToUse);
}
}
}
方法二C = A
public void mapClassCToClassA(List<ClassC> c, List<ClassA> a){
Comparator<ClassC> sortFunc = Comparator.comparing(ClassC::getDate);
Collections.sort(c, sortFunc);
for (ClassA aObj : a){
LocalDate dateA = aObj.getDate();
ClassC cObjToUse = null;
for (ClassC cObj : c){
LocalDate dateC = cObj.getDate();
if (dateC.isAfter(dateA)){
break;
}
else {
cObjToUse = cObj;
}
}
if (cObjToUse != null){
aObj.setClassC(cObjToUse);
}
}
}
我想做一些东西,比如:
public void mapClassToClassA(List< **xx** > t, List<ClassA> a){
Comparator< **xx** > sortFunc = Comparator.comparing( **xx** ::getDate);
Collections.sort( t , sortFunc);
for (ClassA aObj : a){
LocalDate dateA = aObj.getDate();
**xx** objToUse = null;
for (**xx** obj : t){
LocalDate dateT = obj.getDate();
if (dateT.isAfter(dateA)){
break;
}
else {
objToUse = bObj;
}
}
if (objToUse != null){
aObj.setClassXXX(objToUse);
}
}
}
我试着使用泛型
public <T> void mapToArende(List<T> t, List<ClassA> a){
...
T objToUse = null;
但这样的话:
-
我不能做比较器,因为这不起作用
Comparator.comparing(T::getFromdat);
-
而不是调用obj.getDate(),在这里我发现了一个使用反射的解决方案,但人们建议不要这样做.但它很有效.我应该怎么做呢?
Method m = obj.getClass().getMethod("getDate"); LocalDate dateT = (LocalDate) m.invoke(obj);
-
我不知道如何调用aObj.setClassXXX
我读过关于lambdas的文章,但看不出如何处理这些问题.