【问题标题】:Filtering a Page过滤页面
【发布时间】: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&lt;K2Agents&gt;,可能为空但仍然是一个列表,所以它不是什么都不是(我知道这是挑剔但要获得正确的答案,最好尽可能精确)。
  • 我的意思是 iterable1 应该返回一个页面。我打印了 iterable 并返回了一个 Page,但 iterables1 什么也没返回。谢谢
  • 试试这个iterable.map(k2Agent -&gt; k2Agent.getLastName().equals(searchName) ? k2Agent : null);
  • 你不应该做你在文本中写的,因为它破坏了语义页面契约,它承诺页面要么有给定的大小,要么没有下一页。要么对数据库进行过滤(无论如何这都是智能的),要么返回一个列表(你的代码已经这样做了)。在后一种情况下,您应该使用 page.filter().get().collect()。

标签: java java-8 java-stream


【解决方案1】:

首先使用stream过滤Page&lt;K2Agent&gt;,最后使用PageImpl创建Page对象

List<K2Agents> result = iterable.getContent()
                                   .stream()
                                   .filter(i->i.getLastName().equals(searchName))
                                   .collect(Collectors.toList());

Page<K2Agent> r = new PageImpl<K2Agent>(result);

【讨论】:

  • Page.map 操作在此处获取Function&lt;K2Agents,K2Agents&gt;!
  • 谢谢,但我得到了这个:java.lang.ClassCastException: java.util.ArrayList$Itr cannot be cast to org.springframework.data.domain.Page @Deadpool
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-13
相关资源
最近更新 更多