java sortedlist 用法_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 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 studentsSortName = studentList.stream().sorted(Comparator.comparing(StudentInfo::getAge)).collect(Collectors.toList());

//排序后输出

StudentInfo.printStudents(studentsSortName);

排序后结果

7a081afc06e3ec858e341592bd42a3b9.png

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

//排序前输出

StudentInfo.printStudents(studentList);

//按年龄排序(Integer类型)

List studentsSortName = studentList.stream().sorted(Comparator.comparing(StudentInfo::getAge).reversed()).collect(Collectors.toList());

//排序后输出

StudentInfo.printStudents(studentsSortName);

排序后结果

da515190b9fcdd52d4ed718964538383.png

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

//排序前输出

StudentInfo.printStudents(studentList);

//按年龄排序(Integer类型)

List studentsSortName = studentList.stream()

.sorted(Comparator.comparing(StudentInfo::getAge).reversed().thenComparing(StudentInfo::getHeight))

.collect(Collectors.toList());

//排序后输出

StudentInfo.printStudents(studentsSortName);

排序后结果

5e0efc3792fa3d0c27d3e02d670e1050.png

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

实现效果如图:

cf5dd0d06172f81f05ffa502c7b2379a.png

代码如下:

参数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()的指定位置就可以了

2ef5018972197e8c0b76dd0612a4243c.png

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

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

8f3eb2fa798caf08e78989e21bc9dc8b.png

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

原文链接:https://blog.csdn.net/Romantic_321/article/details/107252796

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值