我有以下代码:
Function<String,Boolean> funcParse = (String f)-> {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(f);
try
{
YearMonth.parse( date , formatter );
}
catch (DateTimeParseException e)
{
return false;
}
return true;
};
Arrays.stream(MONTHYEAR_FORMATS.split("\\|")).findFirst(format -> funcParse.apply(format));
我在这里有语法警告:apply (java.lang.String) in Function cannot be applied to (<lambda parameter>)
我做错了什么?
答案 0 :(得分:1)
这实际上是Bindable
的合适人选(我认为我已将此视为Holger的一些答案,但可以&#39 ;现在找到它)。
所以你有通常的解析方法:
static boolean parse(String date, String format) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
try {
YearMonth.parse(date, formatter);
} catch (DateTimeParseException e) {
return false;
}
return true;
}
您创建了bindValue
方法:
public static <T, U> Predicate<U> bindValue(BiFunction<T, U, Boolean> f, T t) {
return u -> f.apply(t, u);
}
基本上将date
绑定到Predicate
- 因为date
不会更改,只有format
会更改。
然后
BiFunction<String, String, Boolean> toPredicate = Bindable::parse;
Predicate<String> predicate = bindValue(toPredicate, date);
用法非常简单:
String date = "SomeDate";
Predicate<String> predicate = bindValue(toPredicate, date);
Arrays.stream(MONTHYEAR_FORMATS.split("|"))
.filter(predicate)
.findFirst();