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集合进行排序的操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
赞 (0)