Java 自定义函数:在流中应用
我有以下代码:Java 自定义函数:在流中应用,java,function,lambda,java-8,java-stream,Java,Function,Lambda,Java 8,Java Stream,我有以下代码: Function<String,Boolean> funcParse = (String f)-> { DateTimeFormatter formatter = DateTimeFormatter.ofPattern(f); try { YearMonth.parse( date , formatter ); } catch (DateTimeParseException e) {
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));
函数funcParse=(字符串f)->{
DateTimeFormatter formatter=模式的DateTimeFormatter.of(f);
尝试
{
解析(日期,格式化程序);
}
捕获(DateTimeParse异常)
{
返回false;
}
返回true;
};
stream(MONTHYEAR\u FORMATS.split(“\\\\”).findFirst(format->funcParse.apply(format));
这里有语法警告:apply(java.lang.String)在函数中不能应用到()
我做错了什么?
这实际上是可绑定的
的一个很好的候选者(我想我已经看到了霍尔格的一些答案,但现在找不到)。
因此,您有了常用的解析方法:
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);
}
使用方法非常简单:
String date = "SomeDate";
Predicate<String> predicate = bindValue(toPredicate, date);
Arrays.stream(MONTHYEAR_FORMATS.split("|"))
.filter(predicate)
.findFirst();
String date=“SomeDate”;
谓词=bindValue(toPredicate,date);
Arrays.stream(MONTHYEAR_格式.split(“|”))
.filter(谓词)
.findFirst();
findFirst()
不接受任何参数。您可以使用.filter(..).findFirst()
,并让funcParse
成为谓词
。但是创建函数
而不是首先创建谓词
的意义何在?
String date = "SomeDate";
Predicate<String> predicate = bindValue(toPredicate, date);
Arrays.stream(MONTHYEAR_FORMATS.split("|"))
.filter(predicate)
.findFirst();