泛型与Function接口实现UserInfo列表多字段排序演示

package _5_34;

import java.util.Collections;

import java.util.Comparator;

import java.util.List;

import java.util.function.Function;

public class MySort<R, E extends Comparable<R>> {

public void Sort(List<E> list, Function<E, R> f, String sort) {

Collections.sort(list, new Comparator<E>() {

public int compare(E a, E b) {

int ret = 0;

R a1 = f.apply(a);

R b1 = f.apply(b);

if (sort != null && "desc".equals(sort)) {

ret = b1.compareTo(a1);

} else {

ret = a1.compareTo(b1);

}

return ret;

}

});

}

}

package _5_34;

import java.util.ArrayList;

import java.util.List;

import java.text.SimpleDateFormat;

public class Test {

public static void main(String[] args) throws Exception {

List<UserInfo> list = new ArrayList<UserInfo>();

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");

list.add(new UserInfo(3, "Chang", formatter.parse("2017-12-01"), 11));

list.add(new UserInfo(1, "Li", formatter.parse("2016-10-01"), 30));

list.add(new UserInfo(2, "Zhen", formatter.parse("2015-10-01"), 20));

// Sort by userId descending

MySort<UserInfo, Integer> sortList1 = new MySort<UserInfo, Integer>();

sortList1.Sort(list, x -> x.getUserId(), "desc");

System.out.println("------按 userId 降序排序------");

for (UserInfo user : list) {

System.out.println(user.toString());

}

// Sort by username

MySort<UserInfo, String> sortList2 = new MySort<UserInfo, String>();

sortList2.Sort(list, x -> x.getUsername(), null);

System.out.println("------按 username 排序------");

for (UserInfo user : list) {

System.out.println(user.toString());

}

// Sort by birthDate

MySort<UserInfo, java.util.Date> sortList3 = new MySort<UserInfo, java.util.Date>();

sortList3.Sort(list, x -> x.getBirthDate(), null);

System.out.println("------按 birthDate 排序------");

for (UserInfo user : list) {

System.out.println(user.toString());

}

}

}

package _5_34;

import java.io.Serializable;

import java.text.SimpleDateFormat;

import java.util.Date;

public class UserInfo implements Serializable {

private Integer userId;

private String username;

private java.util.Date birthDate;

private Integer age;

private SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");

public UserInfo() {

}

public UserInfo(Integer userId, String username, java.util.Date birthDate, Integer age) {

this.userId = userId;

this.username = username;

this.birthDate = birthDate;

this.age = age;

}

public Integer getUserId() {

return this.userId;

}

public void setUserId(Integer value) {

this.userId = value;

}

public String getUsername() {

return this.username;

}

public void setUsername(String value) {

this.username = value;

}

public java.util.Date getBirthDate() {

return this.birthDate;

}

public void setBirthDate(java.util.Date value) {

this.birthDate = value;

}

public void setBirthDatestr(String value) throws Exception {

setBirthDate(formatter.parse(value));

}

public String getBirthDatestr() {

return formatter.format(getBirthDate());

}

public Integer getAge() {

return this.age;

}

public void setAge(Integer value) {

this.age = value;

}

public String toString() {

return new StringBuffer().append(getUserId()).append("; ").append(getUsername()).append("; ").append(getBirthDatestr()).append("; ").append(getAge().toString());

}

}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值