我有一个元素列表,我想在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);
}
答案 0 :(得分:3)
findAllByMatch
方法返回一个List<MatchEvent>
。
List.sort(someComparator)
方法返回void
,即它什么也不返回,因为它对列表进行了原位排序。因此,您无法将通话链接到forEach(someConsumer)
。
解决您问题的一种方法是使用Stream
而不是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
(已排序的),您可以在其上调用终端操作< / em>,例如collect
,forEach
,anyMatch
等
另一种可能性是将列表提取到变量中并使用它:
List<MatchEvent> list = matchEventService.findAllByMatch(SOME_MATCH);
list.sort(Comparator.comparing(MatchEvent::getDateReceived));
list.forEach(de -> matchEventMobileApp.add(new MatchEventMobileApp(de)));
答案 1 :(得分:2)
List<MatchEventMobileApp> matchEventMobileApp
= matchEventService
.findAllByMatch(“JVT”)
.stream()
.sorted(Comparator.comparing(MatchEvent::getDateReceived))
.map(MatchEventMobileApp::new)
.collect(Collectors.toList());