SOLR-7377,SOLR-7524:Make Streaming Expressions Java 7 Compatible

git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1679376 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Joel Bernstein 2015-05-14 14:10:34 +00:00
parent bbc8484653
commit 6503e980c3
3 changed files with 19 additions and 15 deletions

View File

@ -1,5 +1,7 @@
package org.apache.solr.client.solrj.io.comp; package org.apache.solr.client.solrj.io.comp;
import java.io.Serializable;
import org.apache.solr.client.solrj.io.Tuple; import org.apache.solr.client.solrj.io.Tuple;
/* /*
@ -22,6 +24,6 @@ import org.apache.solr.client.solrj.io.Tuple;
/** /**
* Interface for use with a comparator lambda * Interface for use with a comparator lambda
*/ */
public interface ComparatorLambda { public interface ComparatorLambda extends Serializable {
public int compare(Tuple leftTuple, Tuple rightTuple); public int compare(Tuple leftTuple, Tuple rightTuple);
} }

View File

@ -70,22 +70,21 @@ public class FieldComparator extends StreamComparator implements Comparator<Tupl
*/ */
private void assignComparator(){ private void assignComparator(){
if(ComparatorOrder.DESCENDING == order){ if(ComparatorOrder.DESCENDING == order){
// What black magic is this type intersection?? comparator = new ComparatorLambda() {
// Because this class is serializable we need to make sure the lambda is also serializable. public int compare(Tuple leftTuple, Tuple rightTuple) {
// This can be done by providing this type intersection on the definition of the lambda.
// Why not do it in the lambda interface? Functional Interfaces don't allow extends clauses
comparator = (ComparatorLambda & Serializable)(leftTuple, rightTuple) -> {
Comparable leftComp = (Comparable)leftTuple.get(leftField); Comparable leftComp = (Comparable)leftTuple.get(leftField);
Comparable rightComp = (Comparable)rightTuple.get(rightField); Comparable rightComp = (Comparable)rightTuple.get(rightField);
return rightComp.compareTo(leftComp); return rightComp.compareTo(leftComp);
}
}; };
} }
else{ else{
// See above for black magic reasoning. comparator = new ComparatorLambda() {
comparator = (ComparatorLambda & Serializable)(leftTuple, rightTuple) -> { public int compare(Tuple leftTuple, Tuple rightTuple) {
Comparable leftComp = (Comparable)leftTuple.get(leftField); Comparable leftComp = (Comparable)leftTuple.get(leftField);
Comparable rightComp = (Comparable)rightTuple.get(rightField); Comparable rightComp = (Comparable)rightTuple.get(rightField);
return leftComp.compareTo(rightComp); return leftComp.compareTo(rightComp);
}
}; };
} }
} }

View File

@ -54,7 +54,10 @@ public class StreamFactory implements Serializable {
return this; return this;
} }
public String getCollectionZkHost(String collectionName){ public String getCollectionZkHost(String collectionName){
return this.collectionZkHosts.getOrDefault(collectionName, null); if(this.collectionZkHosts.containsKey(collectionName)){
return this.collectionZkHosts.get(collectionName);
}
return null;
} }
public Map<String,Class> getStreamFunctions(){ public Map<String,Class> getStreamFunctions(){