Java8 lambda 谓词异常

标签 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{ 
....
}

这可能吗?

最佳答案

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

使用StandardCharsets.UTF_16LE作为 Charset 参数。


Stream#filter(Predicate)期待一个 Predicate它提供了一个 test(Object)方法。由于此方法未声明作为 UnsupportedEncodingException 父类(super class)型的已检查异常(并且由于 UnsupportedEncodingException 本身已被检查),因此主体抛出此类异常的任何 lambda 表达式都将被不相容。同样,对声明此类异常的方法的任何方法引用也将是不兼容的。

关于Java8 lambda 谓词异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27508869/

相关文章:

c++ - 为什么 lambda 没有从到达范围捕获类型 const double,而 const int 是?

java - Predicates Java 8 的含义和用法

Java 8 lambdas 按多个字段分组

java - 如何检查 Java 8 Streams 中是否存在任何重复项?

Java内置日期操作和比较

java - 如何将代理注入(inject)服务?

python - 变量如何在函数内部取值而不在任何地方声明

Java - 搜索数据库表中的最大ID

java - Spring、Hibernate 和 AbstractTransactionalJUnit4SpringContextTests : objects with multiple mappings to same underlying data cannot be found

lambda 对象的 C++ 地址作为函数的参数