java stream泛型不填写会导致类型擦除
List list = new ArrayList();
list.add("aaa");
list.stream().map(a->a.toString())
.filter(a->a)
如上代码,如果list不加泛型,会导致stream后的每个transform类型都无法识别,全部变成了Object类型,例如filter算子里面,a应该是个String类型。
这种现象产生的深层次的原因是什么,求解释
回答
问题补充:
List<Object> list = new ArrayList();
list.stream().map(a->a.toString())
.filter(a->a)
与
List list = new ArrayList();
list.stream().map(a->a.toString())
.filter(a->a)
的结果不一致。第一段代码,在map之后,其后面的stream元素的类型已经转成String了,
而在下面一段代码里面,所有的stream元素类型都是Object,无论算子如何操作,都无法改变其类型,类型被擦除