为了账号安全,请及时绑定邮箱和手机立即绑定

无法在原始类型 void 上调用 forEach((<no type> de) -> {})

无法在原始类型 void 上调用 forEach((<no type> de) -> {})

蓝山帝景 2021-12-01 15:07:47
我有一个元素列表,我想在 forEach 元素中创建一个构造函数,但出现错误:无法在原始类型 void 上调用 forEach(( de) -> {})List<MatchEventMobileApp> matchEventMobileApp     = new ArrayList<matchEventMobileApp>();matchEventService    .findAllByMatch(“JVT”))        .sort(Comparator.comparing(MatchEvent::getDateReceived))        .forEach(de -> matchEventMobileApp.add(new MatchEventMobileApp(de)));public List<MatchEvent> findAllByMatch(Match match) {        return matchEventRepository.findAllByMatch(match);    }
查看完整描述

2 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

该findAllByMatch方法正在返回一个List<MatchEvent>.


并且该List.sort(someComparator)方法返回void,即它不返回任何内容,因为它就地对列表进行排序。所以你不能将调用链接到forEach(someConsumer).


解决您的问题的一种方法是使用 aStream而不是 a List:


List<MatchEventMobileApp> matchEventMobileApp = matchEventService

    .findAllByMatch(SOME_MATCH)

        .stream()

        .sorted(Comparator.comparing(MatchEvent::getDateReceived))

        .map(de -> new MatchEventMobileApp(de)) // or MatchEventMobileApp::new

        .collect(Collectors.toList()); // better collect to a new list instead of

                                       // adding to an existing one within forEach

这样一来,你现在有工作Stream,其sorted方法返回另一个Stream(已排序的),可以在其上调用终端操作,即collect,forEach,anyMatch等等。


另一种可能性是将列表提取到变量中并使用它:


List<MatchEvent> list = matchEventService.findAllByMatch(SOME_MATCH);


list.sort(Comparator.comparing(MatchEvent::getDateReceived));


list.forEach(de -> matchEventMobileApp.add(new MatchEventMobileApp(de)));


查看完整回答
反对 回复 2021-12-01
?
莫回无

TA贡献1865条经验 获得超7个赞

List<MatchEventMobileApp> matchEventMobileApp 
    = matchEventService
        .findAllByMatch(“JVT”)
        .stream()
        .sorted(Comparator.comparing(MatchEvent::getDateReceived))
        .map(MatchEventMobileApp::new)
        .collect(Collectors.toList());



查看完整回答
反对 回复 2021-12-01
  • 2 回答
  • 0 关注
  • 117 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信