今天用Java Stream写了这样一段代码,本意是合并两个list,并去重,但是出现无法启动问题
1、代码
supplierNames = Stream.concat(supplierNames.stream(), supplierNameTemp.stream())
.distinct().collect(Collectors.toList());
2、启动出现如下问题
Caused by: java.lang.IllegalArgumentException: INVOKESPECIAL/STATIC on interfaces require ASM 5
at org.springframework.asm.MethodVisitor.visitMethodInsn(Unknown Source)
at org.springframework.asm.ClassReader.a(Unknown Source)
at org.springframework.asm.ClassReader.b(Unknown Source)
at org.springframework.asm.ClassReader.accept(Unknown Source)
at org.springframework.asm.ClassReader.accept(Unknown Source)
at org.springframework.core.type.classreading.SimpleMetadataReader.<init>(SimpleMetadataReader.java:64)
at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:80)
at org.springframework.core.type.classreading.CachingMetadataReaderFactory.getMetadataReader(CachingMetadataReaderFactory.java:102)
at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:266)
... 37 more
3、排查原因
低版本(例如3.2.9)的spring不支持调用接口中的static方法,例如
Comparator.comparingInt
Function.identity
查看我的spring的pom版本以及Stream.concat具体定义信息,正是接口中static方法
spring版本查看 Stream.concat定义4、问题解决
修改成笨笨的方式,启动无问题
supplierNames.addAll(supplierNameTemp);
supplierNames = supplierNames.stream().distinct().collect(Collectors.toList());
网友评论