之前一直在项目中使用List 的排序,或者一些其他的用法,今天总结一下。做个记录
一、创建一个实体类
项目的实际应用中用的比较多的是在一些实体类的集合中,进行一些比较或者排序。
public class User {
private int age;
private String name;
private String paixu;
public User(int age, String name) {
super();
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPaixu() {
return paixu;
}
public void setPaixu(String paixu) {
this.paixu = paixu;
}
@Override
public String toString() {
return "User [age=" + age + ", name=" + name + ", paixu=" + paixu + "]";
}
二、创建一个简单的运行方法
1.一般使用 数字 直接比较的时候 比较简单,两者比较大小就可以。但是对于汉字之类的比较,我通常的做法是,用一个字段存储汉字的首字母,这样直接按照汉字的字母进行比较就可以。下面是一个提取汉字首字母的方法
/**
* 提取每个汉字的首字母
*
* @param str
* @return String
*/
public static String getPinYinHeadChar(String str) {
String convert = "";
for (int j = 0; j < str.length(); j++) {
char word = str.charAt(j);
// 提取汉字的首字母
String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word);
if (pinyinArray != null) {
convert += pinyinArray[0].charAt(0);
} else {
convert += word;
}
}
return convert;
}
2.使用的jar包
<!-- https://mvnrepository.com/artifact/com.github.liuzhuoming23/pinyin4j-spring-boot-starter -->
<dependency>
<groupId>com.github.liuzhuoming23</groupId>
<artifactId>pinyin4j-spring-boot-starter</artifactId>
<version>0.0.4</version>
</dependency>
3.记录一下示例代码
代码中使用了 java 8 的 新特性 lambda 表达式,好处:使代码简单紧凑。
public static void paixu() {
List<User> uList = new ArrayList<User>();
uList.add(new User(12, "张三"));
uList.add(new User(13, "李四"));
uList.add(new User(10, "王五"));
uList.add(new User(89, "赵柳"));
uList.add(new User(1, "苟牧"));
uList.add(new User(24, "狗子"));
// 获取名字的每一个汉字的首字母 其实如果用汉字来排序的话都可以使用此方法
uList.forEach(e -> e.setPaixu(Pinyin4jUtil.getPinYinHeadChar(e.getName())));
// 按照年龄升序
uList.sort((User u1, User u2) -> u1.getAge() - u2.getAge());
System.out.println("按照年龄升序==" + uList.toString());
// 按照年龄降序
uList.sort((User u1, User u2) -> u2.getAge() - u1.getAge());
System.out.println("按照年龄降序==" + uList.toString());
// 按照姓名 升序
uList.sort((User u1, User u2) -> u1.getPaixu().compareTo(u2.getPaixu()));
System.out.println("按照姓名 升序==" + uList.toString());
// 按照姓名降序
uList.sort((User u1, User u2) -> u2.getPaixu().compareTo(u1.getPaixu()));
System.out.println("按照姓名降序==" + uList.toString());
//判断是否存在重复值
Map<Object, Long> map = uList.stream().collect(Collectors.groupingBy(User -> User.getName(),Collectors.counting()));
map.forEach((k, v) -> {
if (v > 1) {
buffer.append(k+",");
}
});
System.out.println("存在重复的值:"+buffer);
Map<Object, Long> map2 = uList.stream().collect(Collectors.groupingBy(User->User.getAge(),Collectors.counting()));
map2.forEach((k, v) -> System.out.println(k + ":" + v));
// 对于单一数据类型排序
List<Integer> intList = new ArrayList<Integer>();
intList.add(1);
intList.add(231);
intList.add(123);
intList.add(111);
intList.add(123441);
intList.add(2231);
intList.add(11);
// 默认排序升序
intList.sort(null);
//也可以使用这个
intList.sort((a, b) -> a - b);
System.out.println("升序==" + intList.toString());
// 降序排序
intList.sort((a, b) -> b - a);
System.out.println("降序==" + intList.toString());
// 获取 大于100的数量
long num = intList.stream().filter(e -> e > 100).count();
System.out.println("年龄大于100的数量:" + num);
}
4.运行结果
public static void main(String[] args) {
paixu();
}
按照年龄升序==[User [age=1, name=苟牧, paixu=gm], User [age=10, name=王五, paixu=ww], User [age=12, name=张三, paixu=zs], User [age=13, name=李四, paixu=ls], User [age=24, name=狗子, paixu=gz], User [age=89, name=赵柳, paixu=zl]]
按照年龄降序==[User [age=89, name=赵柳, paixu=zl], User [age=24, name=狗子, paixu=gz], User [age=13, name=李四, paixu=ls], User [age=12, name=张三, paixu=zs], User [age=10, name=王五, paixu=ww], User [age=1, name=苟牧, paixu=gm]]
按照姓名 升序==[User [age=1, name=苟牧, paixu=gm], User [age=24, name=狗子, paixu=gz], User [age=13, name=李四, paixu=ls], User [age=10, name=王五, paixu=ww], User [age=89, name=赵柳, paixu=zl], User [age=12, name=张三, paixu=zs]]
按照姓名降序==[User [age=12, name=张三, paixu=zs], User [age=89, name=赵柳, paixu=zl], User [age=10, name=王五, paixu=ww], User [age=13, name=李四, paixu=ls], User [age=24, name=狗子, paixu=gz], User [age=1, name=苟牧, paixu=gm]]
升序==[1, 11, 111, 123, 231, 2231, 123441]
降序==[123441, 2231, 231, 123, 111, 11, 1]
年龄大于100的数量:5
网友评论