Use Java 8’s lambda as a method parameter to avoid redundancy
•
Java
I have a class with many methods like this (very simplified):
public Record[] getRecordForXXX(String username,String param1) throws MyException {
User user = getUser(String username); // Always the same
MyObject myObj = getMyObject(param1); // Always the same
// Here is the only line of code,this is different in any of thoose methods
Record[] recs = getRecords1(user,myObject); // or getRecords2(user,myObject) ...
// Handle those records always the same ...
handleRecords(recs); // Always the same
return recs; // Always the same
}
Is there any way to use Lambdas to avoid redundancy, such as:
public Record[] getRecord(String userName,String param1,XXX method) throws MyException {
User user = getUser(String username); // Always the same
MyObject myObj = getMyObject(param1); // Always the same
// => Call the given 'method' using the parameters user and myObj and returning records
// Handle those records always the same ...
handleRecords(recs); // Always the same
return recs; // Always the same
}
I know I can use some kind of interface (command mode) to do this, but I like to use more functional methods... TIA!
Solution
Try this,
public Record[] getRecord(String userName,BiFunction<User,MyObject,Record[]> method) throws MyException {
User user = getUser(String username); // Always the same
MyObject myObj = getMyObject(param1); // Always the same
Record[] recs = method.apply(user,myObj);
// Handle those records always the same ...
handleRecords(recs); // Always the same
return recs; // Always the same
}
You can call new functions as follows:
yourObject.getRecord(userName,param1,(aUserName,aParam1) -> {
// do some stuff with aUserName and aParam1
return aRecordArray;
})
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码
