问题一:
Map<String, List<T>> prodYears = metaDataInfos.stream() .collect(Collectors.groupingBy(p -> { try { /*Field prodYear = p.getClass().getDeclaredField("prodYear"); prodYear.setAccessible(true);*/ return getStreamInsideInfo(p); } catch (Exception e) { logger.info(e.getMessage()); return null; } }));
当catch 中的catch return null时会直接中断流所以将代码块
Field prodYear = p.getClass().getDeclaredField("prodYear"); prodYear.setAccessible(true);
提出为一个方法,在方法内部抛出异常
private String getStreamInsideInfo(T t){ String prodYearTemp ="0"; try { Field prodYear = t.getClass().getDeclaredField("prodYear"); prodYear.setAccessible(true); prodYearTemp = prodYear.get(t).toString(); } catch (Exception e) { e.printStackTrace(); } return prodYearTemp; }
问题二:
当map中的value为Integer时,判断为null会触发自动拆箱操作,便会报空指针
!map.get("0").equals(null)
解决方式:使用Try 包装报错范围。catch抛出去即可。