收集时设置ClassCastException

时间:2019-06-20 17:43:52

标签: java functional-programming

我正在使用下面的代码来体验ClassCastException。

Set<Long> purchaseIds = confirmationCodeToPurchase
                          .entrySet()
                          .stream()
                          .map(Map.Entry::getValue)
                          .map(purchase -> (Long)purchase.getPurchaseId())
                          .collect(Collectors.toSet()))

confirmationCodeToPurchase是从确认码(字符串)到购买类​​型的映射。

我只提取地图(购买)的值,获取每个值的purchaseId,并将其放入集合中。

我收到此错误:

java.lang.ClassCastException: java.lang.Long cannot be cast to Purchase 

,错误所在的行是收集行。 .collect(Collectors.toSet()))

1 个答案:

答案 0 :(得分:1)

从错误描述中,您的方法purchase.getPurchaseId()似乎返回的对象不是Long类型。这就是为什么您会收到类强制转换异常的原因。可以使用此方法的返回值构建Long对象,而不是强制转换,前提是它是String或整数类型。

替换

.map(purchase -> (Long)purchase.getPurchaseId())

使用

.map(purchase -> Long.valueOf(purchase.getPurchaseId()))