Lambda 创建自定义比较器,以防变量关闭 private可选getTopExample(列表exampleList,字符串输入){ String lowerCaseInput=input.toLowerCase(); 比较器exampleNearestMatchComparator=exampleComparator .然后比较((示例ex1,示例ex2)->{ 字符串name1LowerCase=getNameOfExample(ex1).toLowerCase(); 字符串name2LowerCase=getNameOfExample(ex2).toLowerCase(); if(name1LowerCase.startsWith(输入)和name2LowerCase.startsWith(小写输入)){ 返回name1LowerCase.length()
如果要防止每次重新创建最近的匹配比较器,可以在使用比较器之前进行Lambda 创建自定义比较器,以防变量关闭 private可选getTopExample(列表exampleList,字符串输入){ String lowerCaseInput=input.toLowerCase(); 比较器exampleNearestMatchComparator=exampleComparator .然后比较((示例ex1,示例ex2)->{ 字符串name1LowerCase=getNameOfExample(ex1).toLowerCase(); 字符串name2LowerCase=getNameOfExample(ex2).toLowerCase(); if(name1LowerCase.startsWith(输入)和name2LowerCase.startsWith(小写输入)){ 返回name1LowerCase.length(),lambda,java-stream,comparator,Lambda,Java Stream,Comparator,如果要防止每次重新创建最近的匹配比较器,可以在使用比较器之前进行输入,小写输入,以及更新的比较器字段: private Optional<Example> getTopExample(List<Example> exampleList, String input) { String lowerCaseInput = input.toLowerCase(); Comparator<Example> exampleNearestMatchComparator =
输入
,小写输入
,以及更新的比较器
字段:
private Optional<Example> getTopExample(List<Example> exampleList, String input) {
String lowerCaseInput = input.toLowerCase();
Comparator<Example> exampleNearestMatchComparator = exampleComparator
.thenComparing((Example ex1, Example ex2) -> {
String name1LowerCase = getNameOfExample(ex1).toLowerCase();
String name2LowerCase = getNameOfExample(ex2).toLowerCase();
if (name1LowerCase.startsWith(input) && name2LowerCase.startsWith(lowerCaseInput)) {
return name1LowerCase.length() <= name2LowerCase.length() ? 1 : -1;
} else if (name1LowerCase.startsWith(lowerCaseInput)) {
return 1;
} else if (name2LowerCase.startsWith(lowerCaseInput)) {
return -1;
} else {
if (name1LowerCase.contains(lowerCaseInput) && name2LowerCase.contains(lowerCaseInput)) {
return name1LowerCase.length() <= name2LowerCase.length() ? 1 : -1;
} else if (name1LowerCase.contains(lowerCaseInput)) {
return 1;
} else if (name2LowerCase.contains(lowerCaseInput)) {
return -1;
} else {
return 1;
}
}
});
return exampleList.stream())
.max(exampleNearestMatchComparator);
}
谢谢你的建议。让我看看有没有其他选择。
private Comparator<Example> exampleComparator = // your comparator;
private String input;
private String lowerCaseInput;
private Comparator<Example> nearestMatchComparator = // your lambda;
private Comparator<Example> exampleNearestMatchComparator = exampleComparator.thenComparing(nearestMatchComparator);
private Optional<Example> getTopExample(List<Example> exampleList, String input)
{
this.input = input;
this.lowerCaseInput = input.toLowerCase();
return exampleList.stream().max(exampleNearestMatchComparator);
}
private Comparator<Example> exampleComparator = // your comparator;
private Comparator<Example> nearestMatchComparator = new NearestMatchComparator();
private Comparator<Example> exampleNearestMatchComparator = exampleComparator.thenComparing(nearestMatchComparator);
private Optional<Example> getTopExample(List<Example> exampleList, String input)
{
nearestMatchComparator.setInput(input);
return exampleList.stream().max(exampleNearestMatchComparator);
}
private final class NearestMatchComparator
implements Comparator<Example>
{
private String input;
private String lowerCaseInput;
public void setLowerCaseInput(String input)
{
this.input = input;
this.lowerCaseInput = input.toLowerCase();
}
@Override
public int compare(Example ex1, Example ex2)
{
// your implementation
}
}