【Java】【11】String数组和List相互转换
前言:
1,实现Comparator接口的类的对象作为sort的入参
2,在方法的局部使用局部类
3,基于第二种方法,局部类改为匿名类
4,使用lamdba表达式->这种形式
5,借助Comparator和lamdba表达式多条件排序
6,调用方式和第五种有区别,原理一样
注:我以前是常用第1种,看了代码之后,觉得5,6种好一些
正文:
目标:按年龄从小到大排序
compareTo()方法:返回值为-1,第一个参数排前面;返回值为1,则第二个参数排前面;返回0按初始顺序排列
Comparator.comparing可以构造相反的排序:Comparator.comparing,见方法5
0,Java的实体bean结构
import java.util.ArrayList;
import java.util.List; public class Human {
private String name;
private int age; public Human() {
} public Human(String name, int age) {
this.name = name;
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} @SuppressWarnings("serial")
public static List<Human> getAInitHumanList() {
return new ArrayList<Human>() {
{
add(new Human("a", 12));
add(new Human("b", 10));
add(new Human("c", 12));
add(new Human("d", 28));
}
};
} @Override
public String toString() {
return this.getName() + ":" + this.getAge();
}
}
1,实现Comparator接口的类的对象作为sort的入参
其实就是自己先定义一个比较的方法,一般是把这个方法写在实体类里面
public class HumanComparetor implements Comparator<Human> {
@Override
public int compare(Human h1, Human h2) {
if (h1.getAge() > h2.getAge()) {
return 1;
} else if (h1.getAge() == h2.getAge()) {
return 0;
} else {
return -1;
}
}
}
调用
public static void main(String[] args) {
List<Human> humans = Human.getAInitHumanList();
Collections.sort(humans, new HumanComparetor());
}
2,在方法的局部使用局部类
这样的格式看着就不太想用
public static void main(String[] args) {
List<Human> humans = Human.getAInitHumanList();
//方法内-局部类
class HumanComparetor implements Comparator<Human> {
@Override
public int compare(Human h1, Human h2) {
return h1.getAge() - h2.getAge();
}
}
Collections.sort(humans, new HumanComparetor());
}
3,基于第二种方法,局部类改为匿名类
同上
public static void main(String[] args) {
List<Human> humans = Human.getAInitHumanList();
//匿名类
Collections.sort(humans, new Comparator<Human>() {
@Override
public int compare(Human h1, Human h2) {
return h1.getAge() - h2.getAge();
}
});
}
4,使用lamdba表达式->这种形式
public static void main(String[] args) {
List<Human> humans = Human.getAInitHumanList();
//lamdba 表达式 ->
Collections.sort(humans, (Human h1, Human h2) -> h1.getAge() - h2.getAge());
}
5,借助Comparator和lamdba表达式多条件排序
public static void main(String[] args) {
List<Human> humans = Human.getAInitHumanList();
Collections.sort(humans, Comparator.comparing(Human::getAge).thenComparing(Human::getName));
System.out.println(humans);
}
结果:[b:10, a:12, c:12, d:28]
相反的排序
public static void main(String[] args) {
List<Human> humans = Human.getAInitHumanList();
Collections.sort(humans, Comparator.comparing(Human::getAge).thenComparing(Human::getName).reversed());
System.out.println(humans);
}
结果:[d:28, c:12, a:12, b:10]
6,调用方式和第五种有区别,原理一样
public static void main(String[] args) {
List<Human> humans = Human.getAInitHumanList();
//直接用list.sort
humans.sort(Comparator.comparing(Human::getAge).thenComparing(Human::getName));
}
参考博客:
1,java的list的几种排序写法整理(sort的用法) - 赫双炎 - CSDN博客
https://blog.csdn.net/heliangb46/article/details/77188939
2,Java中Collections.sort()排序详解 - 薛瑄的博客 - CSDN博客
https://blog.csdn.net/xx326664162/article/details/52227690/
3,Java:集合,对列表(List)中的自定义对象按属性(字段)排序(正序、倒序)的方法 - 那些年的事儿 - 博客园
https://www.cnblogs.com/nayitian/p/3322267.html
4,java list按照 对象 指定多个字段属性进行排序 - 羽林.Luouy - 博客园
https://www.cnblogs.com/Luouy/p/7159550.html
【Java】【11】String数组和List相互转换的更多相关文章
- JMeter脚本java代码String数组要写成String[] args,不能写成String args[],否则报错。
JMeter脚本java代码String数组中括号要写在类型关键字后面,不能写在变量名后面.
- java代码-----String数组进行排序。是英文的字符串
总结:主要是方法不同了.是compareTo()方法比较字符串大小 package com.s.x; import java.util.Arrays; public class Jay { publi ...
- java中String数组和List的互相转化
1.List转String数组 方法一: //先准备一个List List<String> testList=new ArrayList<>(); testList.add(& ...
- Java从string数组创建临时文件
//从string数组创建临时文件 private static File createSampleFile(String[] strs) throws IOException { File file ...
- java中的数组与集合相互转换
1.数组转换成集合 数组转换为集合,用Arrays.asList方法. public static void main(String[] args) { String[] arr = {"a ...
- java判断string数组中是否包含某个元素
- Java-Runoob-高级教程-实例-数组:11. Java 实例 – 删除数组元素
ylbtech-Java-Runoob-高级教程-实例-数组:11. Java 实例 – 删除数组元素 1.返回顶部 1. Java 实例 - 删除数组元素 Java 实例 以下实例演示了如何使用 ...
- 纯数据结构Java实现(1/11)(动态数组)
我怕说这部分内容太简单后,突然蹦出来一个大佬把我虐到哭,还是悠着点,踏实写 大致内容有: 增删改查,泛型支持,扩容支持,复杂度分析.(铺垫: Java语言中的数组) 基础铺垫 其实没啥好介绍的,顺序存 ...
- NDK(14)Native的char*和Java的String相互转换
转自: http://www.cnblogs.com/canphp/archive/2012/11/13/2768937.html 首先确保C/C++源文件的字符编码是UTF-8与JAVA的class ...
随机推荐
- Excel无法打开文件xxx.xlsx,因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配
office版本:2016 系统版本:win10 问题描述: 1.桌面新建excel表格后,打开时,提示“Excel无法打开文件xxx.xlsx,因为文件格式或文件扩展名无效.请确定文件未损坏,并且文 ...
- IAR Embedded Workbench for ARM 8.22.1 基础使用教程
面向尚未熟悉且初次使用该软件的新手(比如我...) 1.建立新工作区 File-->>New Workspace 2.建立新项目 1) Project-->>Create Ne ...
- CCF CSP 201503-1 图像旋转 (降维)
题目链接:http://118.190.20.162/view.page?gpid=T27 问题描述 试题编号: 201503-1 试题名称: 图像旋转 时间限制: 5.0s 内存限制: 256.0M ...
- redis 在 php 中的应用(string篇)
本文为我阅读了 redis参考手册 之后结合 博友的博客 编写,注意 php_redis 和 redis-cli 的区别(主要是返回值类型和参数用法) 目录: string(字符串) SET SETN ...
- appium+python3+pycharm踩得坑2
没相当刚把上一个错误解决,这个马上就解决了: selenium.common.exceptions.WebDriverException: Message: A new session could n ...
- flutter- 圆角
单个圆角变化 Container( height: 200, decoration: BoxDecoration( color: Colors.green, borderRadius: BorderR ...
- Dio添加Cookie
在使用Options添加headers时,Map没有定义内部类型: Dio dio = new Dio(); Map headers = new Map(); headers['Cookie'] = ...
- JavaScript实现自定义日期时间
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【题解】Luogu P4069 [SDOI2016]游戏
原题传送门 看到这种题,想都不用想,先写一个树链剖分 然后发现修改操作增加的是等差数列,这使我们想到了李超线段树 先进性树剖,然后用李超线段树维护区间最小,这样就做完了(写码很容易出错) 复杂度为\( ...
- 获取手机当前显示的ViewController
//获取手机当前显示的ViewController - (UIViewController*)currentViewController{ UIViewController* vc = [UIAppl ...