服务器之家

服务器之家 > 正文

java8 stream的多字段排序实现(踩坑)

时间:2021-08-25 11:39     来源/作者:baomw

关于java8 的stream排序用法这里不做多说,这里介绍下曾经在多字段排序时遇到过的一个坑。
需求:需要根据id去分组,然后取出每组中行号最大的一个对象值。
想到可以利用stream的多字段排序,先按id去排,再看行号去排,demo代码如下:

  1. class Tt{
  2. private int id;
  3.  
  4. private int line;
  5.  
  6. public Tt(int id, int line) {
  7. this.id = id;
  8. this.line = line;
  9. }
  10.  
  11. public int getId() {
  12. return id;
  13. }
  14.  
  15. public void setId(int id) {
  16. this.id = id;
  17. }
  18.  
  19. public int getLine() {
  20. return line;
  21. }
  22.  
  23. public void setLine(int line) {
  24. this.line = line;
  25. }
  26.  
  27. @Override
  28. public String toString() {
  29. return "Tt{" +
  30. "id=" + id +
  31. ", line=" + line +
  32. '}';
  33. }
  34. }

对象代码如上,只提供id和行号字段,做演示用:
测试代码如下:

  1. public static void main(String[] args) {
  2. List<Tt> list = new ArrayList<>();
  3.  
  4. list.add(new Tt(1,2));
  5. list.add(new Tt(2,2));
  6. list.add(new Tt(5,2));
  7. list.add(new Tt(5,1));
  8. list.add(new Tt(4,2));
  9. list.add(new Tt(7,2));
  10. list.add(new Tt(3,2));
  11.  
  12. List<Tt> sortedList = list.stream() .sorted(Comparator.comparing(Tt::getId)).sorted(Comparator.comparing(Tt::getLine))
  13. .collect(Collectors.toList());
  14.  
  15. System.err.println(sortedList);
  16. }

根据理论,应该是先根据id去排好序,再根据行号去排号序,效果应该是,按id顺序打印的。结果如下:

java8 stream的多字段排序实现(踩坑)

发现其实并不是想像的效果,结果是按后者顺序打印的。
由此推断出,当需要用到stram多条件排序的时候,需要最后排序的字段需要放在前面排,改后代码如下:

  1. List<Tt> sortedList = list.stream() .sorted(Comparator.comparing(Tt::getLine)).sorted(Comparator.comparing(Tt::getId))
  2. .collect(Collectors.toList());

效果如下:

java8 stream的多字段排序实现(踩坑)

达到预期,问题解决!

到此这篇关于java8 stream的多字段排序实现(踩坑)的文章就介绍到这了,更多相关java8 stream多字段排序内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/baomw/article/details/100916728

标签:

相关文章

热门资讯

yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
2021年耽改剧名单 2021要播出的59部耽改剧列表
2021年耽改剧名单 2021要播出的59部耽改剧列表 2021-03-05
返回顶部