Java8 lambda谓词异常

时间:2014-12-16 16:06:16

标签: java lambda java-8 predicate

我有以下lambda表达式:

public mylambdafunction(){
Optional<MyClass> optional = Arrays.stream(myClassesValues).filter(x ->
   new String(x.bytesArray,"UTF-16LE").equalsIgnoreCase(comparationString)).findFirst();
}

嗯,方法new String(x.bytesArray,” UTF-16LE”)引发了异常UnsupportedEncodingException

我想向主函数mylambdafunction()提出异常,例如:

public mylambdafunction() throws UnsupportedEncodingException{ 
....
}

这可能吗?

1 个答案:

答案 0 :(得分:4)

可能修改功能接口方法的替代方法,因为您使用的是众所周知的字符集,所以使用the overloaded String constructor which accepts a byte[] and a Charset,但不会抛出UnsupportedEncodingException

使用StandardCharsets.UTF_16LE作为Charset参数。


Stream#filter(Predicate)期望Predicate提供test(Object)方法。由于此方法未声明已检查的异常,该异常是UnsupportedEncodingException的超类型(并且由于UnsupportedEncodingException本身已被检查),因此任何其身体抛出此类异常的lambda表达式将不兼容。类似地,对声明此类异常的方法的任何方法引用也都是不兼容的。