【发布时间】:2019-12-06 16:40:39
【问题描述】:
Page<K2Agents> iterable = k2AgentsRepository.findAllByTeamIdIn(teamIds, pageRequest);
List<K2Agents> iterable1 = iterable.stream()
.filter(i->i.getLastName().equals(searchName))
.collect(Collectors.toList());
return iterable1;
我想通过字符串searchName 过滤iterable。最终结果应该是Page。在此代码中 iterable1 什么也不返回。
【问题讨论】:
-
“最终结果应该是
Page”是什么意思?此外,“在此代码中 iterable1 不返回任何内容”也令人困惑,因为.collect(Collectors.toList())确保结果将为List<K2Agents>,可能为空但仍然是一个列表,所以它不是什么都不是(我知道这是挑剔但要获得正确的答案,最好尽可能精确)。 -
我的意思是 iterable1 应该返回一个页面。我打印了 iterable 并返回了一个 Page,但 iterables1 什么也没返回。谢谢
-
试试这个
iterable.map(k2Agent -> k2Agent.getLastName().equals(searchName) ? k2Agent : null); -
你不应该做你在文本中写的,因为它破坏了语义页面契约,它承诺页面要么有给定的大小,要么没有下一页。要么对数据库进行过滤(无论如何这都是智能的),要么返回一个列表(你的代码已经这样做了)。在后一种情况下,您应该使用 page.filter().get().collect()。
标签: java java-8 java-stream