栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

TreeMap通过值对象属性排序

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

TreeMap通过值对象属性排序

和技术人员讨论TreeMap通过值对象排序的方法,记录一下

现在实现通过ReadData对象中的itemNo属性实现排序

public class ReadData {

    private String itemCatagory;

   
    private String itemNo;

   
    private String itemName;

    public String getItemCatagory() {
        return itemCatagory;
    }

    public void setItemCatagory(String itemCatagory) {
        this.itemCatagory = itemCatagory;
    }

    public String getItemNo() {
        return itemNo;
    }

    public void setItemNo(String itemNo) {
        this.itemNo = itemNo;
    }

    public String getItemName() {
        return itemName;
    }

    public void setItemName(String itemName) {
        this.itemName = itemName;
    }
}

第一种方法,初学者常写的方法,定义Comparator比较器,中间经过集合转换实现

public class DemoTest {

    public static void main(String[] args) {
        TreeMap treeMap = new TreeMap();
        ReadData readData1 = new ReadData();
        ReadData readData2 = new ReadData();
        readData1.setItemNo("002");
        readData2.setItemNo("001");
        treeMap.put("111",readData1);
        treeMap.put("222",readData2);

       
        Map resultMap = sortMapByValue(treeMap); //按Value进行排序
        for (Map.Entry entry : resultMap.entrySet()) {
            System.out.println(entry.getKey() + " " + entry.getValue().getItemNo());
        }
    }

    public static Map sortMapByValue(Map oriMap){
        if (oriMap == null || oriMap.isEmpty()) {
            return null;
        }
        Map sortedMap = new linkedHashMap();
        List> entryList = new ArrayList>(
                oriMap.entrySet());
        Collections.sort(entryList, new MapValueComparator());

        Iterator> iter = entryList.iterator();
        Map.Entry tmpEntry = null;
        while (iter.hasNext()) {
            tmpEntry = iter.next();
            sortedMap.put(tmpEntry.getKey(), tmpEntry.getValue());
        }
        return sortedMap;
    }
}

class MapValueComparator implements Comparator>{
    @Override
    public int compare(Map.Entry me1, Map.Entry me2) {
        return me1.getValue().getItemNo().compareTo(me2.getValue().getItemNo());
    }
}

第二种方法,通过集合的stream流结合Comparator比较器实现(java8高级特性应用半成品)

public class DemoTest {

    public static void main(String[] args) {
        TreeMap treeMap = new TreeMap();
        ReadData readData1 = new ReadData();
        ReadData readData2 = new ReadData();
        readData1.setItemNo("002");
        readData2.setItemNo("001");
        treeMap.put("111",readData1);
        treeMap.put("222",readData2);

      
        Map sortedMap = treeMap.entrySet().stream()
                .sorted(new MapValueComparator())
                .collect(Collectors.toMap(
                        Map.Entry::getKey,
                        Map.Entry::getValue,
                        (oldVal,newVal) -> oldVal,
                        linkedHashMap::new
                ));

        sortedMap.entrySet().forEach(System.out::println);

    }


class MapValueComparator implements Comparator>{
    @Override
    public int compare(Map.Entry me1, Map.Entry me2) {
        return me1.getValue().getItemNo().compareTo(me2.getValue().getItemNo());
    }
}

第三种方法,和方法二类似

public class DemoTest {

    public static void main(String[] args) {
        TreeMap treeMap = new TreeMap();
        ReadData readData1 = new ReadData();
        ReadData readData2 = new ReadData();
        readData1.setItemNo("002");
        readData2.setItemNo("001");
        treeMap.put("111",readData1);
        treeMap.put("222",readData2);

        Map map =  new linkedHashMap<>();

        treeMap.entrySet().stream()
                .sorted(new MapValueComparator())
                .forEachOrdered(e -> map.put(e.getKey(),e.getValue()));

        map.entrySet().forEach(System.out::println);

 
    }
}

class MapValueComparator implements Comparator>{
    @Override
    public int compare(Map.Entry me1, Map.Entry me2) {
        return me1.getValue().getItemNo().compareTo(me2.getValue().getItemNo());
    }
}

第四种方法,完全使用stream与functional方法实现,只需一行代码(java8高级特性应用成品)

public class DemoTest {

    public static void main(String[] args) {
        TreeMap treeMap = new TreeMap();
        ReadData readData1 = new ReadData();
        ReadData readData2 = new ReadData();
        readData1.setItemNo("002");
        readData2.setItemNo("001");
        treeMap.put("111",readData1);
        treeMap.put("222",readData2);

        Map map =  new linkedHashMap<>();
        treeMap.entrySet().stream()
                .sorted(Comparator.comparing(ReadData -> ReadData.getValue().getItemNo()))
                .forEachOrdered(e -> map.put(e.getKey(),e.getValue()));
        map.entrySet().forEach(System.out::println);





 
    }
}

结论,java8高级特性真香!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/681967.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号