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
二维码