根据日期排序 List<Date>、List<Map<String,Object>>、List<Object>排序之选择排序

package com.jt.dto;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * User: ldj
 * Date: 2022/3/2
 * Time: 22:48
 * Description: No Description
 */
public class DateListSort {

    public static void main(String[] args) {
        ArrayList<Date> dates = new ArrayList<>();
        dates.add(stringToDate("20230215"));
        dates.add(stringToDate("20220302"));
        dates.add(stringToDate("19951109"));
        dates.add(stringToDate("20501123"));

        ArrayList<String> beforeDateStrList = new ArrayList<>();
        dates.forEach(date -> beforeDateStrList.add(dateToString(date)));
        System.out.println("排序前:" + beforeDateStrList);

        ArrayList<String> afterDateStrList = new ArrayList<>();
        testSort(dates);//倒序
        dates.forEach(date -> afterDateStrList.add(dateToString(date)));
        System.out.println("排序后:" + afterDateStrList);
    }


    //String -> Date
    public static Date stringToDate(String dateStr) {
        Date date = null;
        try {
            SimpleDateFormat ft = new SimpleDateFormat("yyyyMMdd");
            date = ft.parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }

    //Date -> String
    public static String dateToString(Date date) {
        SimpleDateFormat ft = new SimpleDateFormat("yyyyMMdd");
        return ft.format(date);
    }

  
    public static void testSort(List<Date> list) {
        for (int i = 0; i < list.size() - 1; i++) {
            for (int j = 1; j < list.size() - i; j++) {
                if (list.get(i).before(list.get(i + j))) {
                    Date empty;
                    empty = list.get(i);
                    list.set(i, list.get(i + j));
                    list.set(i + j, empty);
                }
            }
        }
    }
}

续更。。 

package com.jt.dto;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * User: ldj
 * Date: 2022/3/5
 * Time: 18:36
 * Description: 根据日期对对象进行倒序
 */
public class ObjectSort {

    private static final String NAME = "name";
    private static final String AGE = "age";
    private static final String BIRTHDAY = "birthday";

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

        Map<String, Object> linkedHashMap1 = new LinkedHashMap<>();
        Map<String, Object> linkedHashMap2 = new LinkedHashMap<>();
        Map<String, Object> linkedHashMap3 = new LinkedHashMap<>();

        linkedHashMap1.put(NAME, "lili");
        linkedHashMap1.put(AGE, 18);
        linkedHashMap1.put(BIRTHDAY, "20220329");

        linkedHashMap2.put(NAME, "liLei");
        linkedHashMap2.put(AGE, 17);
        linkedHashMap2.put(BIRTHDAY, "20210329");

        linkedHashMap3.put(NAME, "ldj");
        linkedHashMap3.put(AGE, 19);
        linkedHashMap3.put(BIRTHDAY, "19951109");

        //模拟返回数据list
        List<Map<String, Object>> objectList = new ArrayList<>();
        objectList.add(linkedHashMap3);
        objectList.add(linkedHashMap2);
        objectList.add(linkedHashMap1);

        System.out.println("倒序前:" + new ObjectMapper().writeValueAsString(objectList));

        //方法1 ==> 倒序
        desSort(objectList);
        System.out.println("倒序后:" + new ObjectMapper().writeValueAsString(objectList));

        //方法2 ==> 升序
        Collections.sort(objectList, new Comparator<Map<String, Object>>() {
            @Override
            public int compare(Map<String, Object> o1, Map<String, Object> o2) {
                Date date1 = stringToDate((String) o1.get(BIRTHDAY));
                Date date2 = stringToDate((String) o2.get(BIRTHDAY));
                return date1.compareTo(date2);   //升序
                //return date2.compareTo(date1); //降序
            }
        });
        System.out.println("升序后:" + new ObjectMapper().writeValueAsString(objectList));

        //函数式接口 lomda表达式写法 ==> 降序
        Collections.sort(objectList, (map1, map2) -> {
            Date date1 = stringToDate((String) map1.get(BIRTHDAY));
            Date date2 = stringToDate((String) map2.get(BIRTHDAY));
            return date2.compareTo(date1);
        });
        System.out.println("降序后:" + new ObjectMapper().writeValueAsString(objectList));
    }

    //String -> Date
    public static Date stringToDate(String dateStr) {
        Date date = null;
        try {
            SimpleDateFormat ft = new SimpleDateFormat("yyyyMMdd");
            date = ft.parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }

    //选择排序算法 <before倒序 after升序>
    public static void desSort(List<Map<String, Object>> list) {
        for (int i = 0; i < list.size() - 1; i++) {
            for (int j = 1; j < list.size() - i; j++) {
                if (stringToDate((String) list.get(i).get(BIRTHDAY)).before(stringToDate((String) list.get(i + j).get(BIRTHDAY)))) {
                    Map<String, Object> empty;
                    empty = list.get(i);
                    list.set(i, list.get(i + j));
                    list.set(i + j, empty);
                }
            }
        }
    }
}

参数换成实体类List<Object>同理  

package com.jt.dto;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * User: ldj
 * Date: 2022/3/6
 * Time: 17:42
 * Description: No Description
 */
public class ObjectSortByField {

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

        Users ldj = new Users("ldj", 15, "20220523");

        Users zhangHao = Users.builder()
                .name("ZhangHao")
                .age(18)
                .birthday("20220315")
                .build();

        List<Users> objectList = new ArrayList<>();
        objectList.add(ldj);
        objectList.add(zhangHao);

        System.out.println("排序前:"+new ObjectMapper().writeValueAsString(objectList));
        desSort(objectList);
        System.out.println("排序后:"+new ObjectMapper().writeValueAsString(objectList));
    }

    //选择排序算法 <before倒序 after升序>
    public static void desSort(List<Users> list) {
        for (int i = 0; i < list.size() - 1; i++) {
            for (int j = 1; j < list.size() - i; j++) {
                if (list.get(i).getAge() < list.get(i + j).getAge()) {
                    Object empty = list.get(i);
                    list.set(i, list.get(i + j));
                    list.set(i + j, (Users) empty);
                }
            }
        }
    }

    //String -> Date
    public static Date stringToDate(String dateStr) {
        Date date = null;
        try {
            SimpleDateFormat ft = new SimpleDateFormat("yyyyMMdd");
            date = ft.parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }
}

@Data
@Builder
@AllArgsConstructor
class Users {
    private String name;
    private Integer age;
    private String birthday;
}

续更。。。

package com.jt.test;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;

/**
 * @Author: ldj
 * @Date: 2022/03/02/20:18
 * @Description:
 */
public class SortDate {
    private static final String NAME = "name";
    private static final String AGE = "age";
    private static final String BIRTHDAY = "birthday";

    public static void main(String[] args) {
        Map<String, Object> linkedHashMap1 = new LinkedHashMap<>();
        Map<String, Object> linkedHashMap2 = new LinkedHashMap<>();
        Map<String, Object> linkedHashMap3 = new LinkedHashMap<>();

        linkedHashMap1.put(NAME, "lili");
        linkedHashMap1.put(AGE, 18);
        linkedHashMap1.put(BIRTHDAY, "20220329");

        linkedHashMap2.put(NAME, "liLei");
        linkedHashMap2.put(AGE, 17);
        linkedHashMap2.put(BIRTHDAY, "20210329");

        linkedHashMap3.put(NAME, "ldj");
        linkedHashMap3.put(AGE, 19);
        linkedHashMap3.put(BIRTHDAY, "19951109");

        //模拟返回数据list
        List<Map<String, Object>> objectList = new ArrayList<>();
        objectList.add(linkedHashMap3);
        objectList.add(linkedHashMap2);
        objectList.add(linkedHashMap1);

        System.out.println("排序前:" + objectList);

        List<Map<String, Object>> newList = sortBySteam(objectList);
        System.out.print("排序后:" +newList);
    }

    //流方式排序
    public static List<Map<String, Object>> sortBySteam(List<Map<String, Object>> objectList) {
        List<Map<String, Object>> newList = objectList.stream().sorted((e1, e2) -> {
            Date date1 = stringToDate((String) e1.get(BIRTHDAY));
            Date date2 = stringToDate((String) e2.get(BIRTHDAY));
            //return date1.compareTo(date2); //升序
            return date2.compareTo(date1);   //降序
        }).collect(Collectors.toList());
        return newList;
    }

    //String -> Date
    public static Date stringToDate(String dateStr) {
        Date date = null;
        try {
            SimpleDateFormat ft = new SimpleDateFormat("yyyyMMdd");
            date = ft.parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }
}
续更。。。。

package com.jt.test;

import lombok.AllArgsConstructor;
import lombok.Data;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @Author: ldj
 * @Date: 2022/05/23/17:32
 * @Description:
 */
public class ObjectSort {
    public static void main(String[] args) {
        User lina = new User("lina", 18, new Date());//小
        for (int i = 0; i < 100000000; i++) {
            i++;
        }
        User lili = new User("ldj", 17, new Date()); //中

        for (int i = 0; i < 100000000; i++) {
            i++;
        }
        User ldj = new User("lili", 15, new Date()); //大

        List<User> userList = new ArrayList<>();
        userList.add(lina);
        userList.add(ldj);
        userList.add(lili);

        List<User> userList1 = sortBySteam2(userList);
        System.out.println(userList1.toString());
    }

    //流方排序式
    public static List<User> sortBySteam1(List<User> objectList) {
        List<User> newList = objectList.stream().sorted(((o1, o2) -> {
            Date birthday1 = o1.getBirthday();
            Date birthday2 = o2.getBirthday();
            return birthday2.compareTo(birthday1);
        })).collect(Collectors.toList());
        return newList;
    }

    //流方排序式
    public static List<User> sortBySteam2(List<User> objectList) {
        List<User> newList = objectList.stream().sorted(Comparator.comparing(User::getBirthday).reversed()).collect(Collectors.toList());
        return newList;
    }
}

@Data
@AllArgsConstructor
class User {
    private String name;
    private Integer age;
    private Date birthday;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值