Java8 使用 stream().sorted()对List集合进行排序的操作

 更新时间:2020年10月10日 10:33:56   作者:Romantic_321  
这篇文章主要介绍了Java8 使用 stream().sorted()对List集合进行排序的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

1、声明一个测试对象

import java.time.LocalDate;
import java.util.List;
import lombok.Data;
 
@Data
public class StudentInfo{
 
  //名称
  private String name;
 
  //性别 true男 false女
  private Boolean gender;
 
  //年龄
  private Integer age;
 
  //身高
  private Double height;
 
  //出生日期
  private LocalDate birthday; 
}
 

2、添加一些测试数据

//测试数据,请不要纠结数据的严谨性
List<StudentInfo> studentList = new ArrayList<>();
studentList.add(new StudentInfo("李小明",true,18,1.76,LocalDate.of(2001,3,23)));
studentList.add(new StudentInfo("张小丽",false,18,1.61,LocalDate.of(2001,6,3)));
studentList.add(new StudentInfo("王大朋",true,19,1.82,LocalDate.of(2000,3,11)));
studentList.add(new StudentInfo("陈小跑",false,17,1.67,LocalDate.of(2002,10,18)));
使用年龄进行升序排序
//排序前输出
StudentInfo.printStudents(studentList);
//按年龄排序(Integer类型)
List<StudentInfo> studentsSortName = studentList.stream().sorted(Comparator.comparing(StudentInfo::getAge)).collect(Collectors.toList());
//排序后输出
StudentInfo.printStudents(studentsSortName);

排序后结果

使用年龄进行降序排序(使用reversed()方法)

//排序前输出
StudentInfo.printStudents(studentList);
//按年龄排序(Integer类型)
List<StudentInfo> studentsSortName = studentList.stream().sorted(Comparator.comparing(StudentInfo::getAge).reversed()).collect(Collectors.toList());
//排序后输出
StudentInfo.printStudents(studentsSortName);

排序后结果

使用年龄进行降序排序,年龄相同再使用身高升序排序

//排序前输出
    StudentInfo.printStudents(studentList);
    //按年龄排序(Integer类型)
    List<StudentInfo> studentsSortName = studentList.stream()
        .sorted(Comparator.comparing(StudentInfo::getAge).reversed().thenComparing(StudentInfo::getHeight))
        .collect(Collectors.toList());
    //排序后输出
    StudentInfo.printStudents(studentsSortName);

排序后结果

补充知识:JAVA实现将文字合成到指定图片的指定位置(JAVA合成文本文字到图片文件:附font字体不生效解决办法)

实现效果如图:

代码如下:

参数s1,s2分别代表你想要合成到图片中的文字信息,如需多个可自行进行修改

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
 
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
 
/**
 * create By Jlm
 */
 
public class ImgBean{
 
  public static void ImgYin(String s1, String s2, String ImgName){
    try{
      File file = new File(ImgName);
      Image src = ImageIO.read(file);
      int wideth=src.getWidth(null);
      int height=src.getHeight(null);
      BufferedImage image=new BufferedImage(wideth,height,BufferedImage.TYPE_INT_RGB);
      Graphics g=image.createGraphics();
      g.drawImage(src,0,0,wideth,height,null);
      //设置字体颜色
      g.setColor(Color.RED);
      //size字体大小
      g.setFont(new Font("STKaiti",Font.PLAIN,50));
      //wideth控制字体距离右侧边缘距离 height控制字体距离底部距离
      g.drawString(s1,wideth-600,height-400);
      g.drawString(s2,wideth-600,height-500);
      g.dispose();
      FileOutputStream out=new FileOutputStream(ImgName);
      JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
      encoder.encode(image);
      out.close();
    }
    catch(Exception e){
      System.out.println(e);
    }
  }
 
  public static void main(String[] args) {
    ImgYin("1111111","2222222","/Users/jianglinmao/Downloads/11.png");
  }
}

有的同学可能发现设置字体的时候可能不生效,目前博主已发现的原因为字体名称对应不上导致

首先在你要进行合成操作的环境下执行如下代码,看看目前该环境已存在的字体有哪些,找到自己想要的字体对应的名称即可

import java.awt.*;
 
/**
 * Created by jlm on 2019/10/22.
 */
public class FontTest {
  public static void main(String[] args) {
    Font[] fonts = GraphicsEnvironment
        .getLocalGraphicsEnvironment().getAllFonts();
    for (Font f : fonts) {
      System.out.println("Name:" + f.getFontName());
    }
  }
}

在控制台寻找自己想要的字体的英文名称,再替换到new Font()的指定位置就可以了

比如红色圈出来的就是字体仿宋和黑体对应的名称,博主试过输入中文是不生效的。

如果不想在原图片文件上直接修改,而是想根据原文件图片,修改后生成新的文件图片,修改代码如下位置即可

以上这篇Java8 使用 stream().sorted()对List集合进行排序的操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java如何自定义List中的sort()排序,用于日期排序

    java如何自定义List中的sort()排序,用于日期排序

    这篇文章主要介绍了java如何自定义List中的sort()排序,用于日期排序,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • 亲测SpringBoot参数传递及@RequestBody注解---踩过的坑及解决

    亲测SpringBoot参数传递及@RequestBody注解---踩过的坑及解决

    这篇文章主要介绍了亲测SpringBoot参数传递及@RequestBody注解---踩过的坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Spring各版本新特性的介绍

    Spring各版本新特性的介绍

    今天小编就为大家分享一篇关于Spring各版本新特性的介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • 走进JDK之不可变类String

    走进JDK之不可变类String

    这篇文章主要给大家介绍了JDK之不可变类String的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用JDK具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • springboot多租户设计过程图解

    springboot多租户设计过程图解

    这篇文章主要介绍了springboot多租户设计过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Android Studio中ButterKnife插件的安装与使用详解

    Android Studio中ButterKnife插件的安装与使用详解

    本篇文章主要介绍了Android Studio中ButterKnife插件的安装与使用详解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • 深入理解Java运行时数据区_动力节点Java学院整理

    深入理解Java运行时数据区_动力节点Java学院整理

    这篇文章主要介绍了Java运行时数据区的相关知识,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2017-06-06
  • SpringBoot使用hutool操作FTP的详细过程

    SpringBoot使用hutool操作FTP的详细过程

    在使用SpringBoot结合hutool操作FTP时,遇到防火墙导致上传文件大小为0kb的问题,通过设置FTP为被动模式解决,本文详细解析了FTP的主动模式和被动模式的工作原理、安全性及适用场景,帮助理解FTP的连接方式和解决网络限制问题
    2024-09-09
  • Java 中的 Class.forName(类名) 使用及原理解析

    Java 中的 Class.forName(类名) 使用及原理解析

    Class.forName是Java中用于动态加载类的强大工具,广泛应用于数据库驱动加载、反射机制和插件系统等场景,它通过ClassLoader加载类并执行静态初始化代码,但在使用时需要注意类路径、初始化副作用和类加载器的选择等问题,感兴趣的朋友一起看看吧
    2024-12-12
  • 如何用java对接微信小程序下单后的发货接口

    如何用java对接微信小程序下单后的发货接口

    这篇文章主要介绍了在微信小程序后台实现发货通知的步骤,包括获取Access_token、使用RestTemplate调用发货接口、处理AccessToken缓存以及发货成功后的提醒,需要的朋友可以参考下
    2025-03-03

最新评论