首页 > 其他分享 >lambda HashMap 排序

lambda HashMap 排序

时间:2023-09-25 16:47:46浏览次数:36  
标签:map HashMap lambda Map age User ------ 排序 name

目录

TreeMap

  1. 按key排序生成map可以有TreeMap 完成,TreeMap可以按key的自然顺序排序(Comparable实现)

lambda comparingByKey

  1. 使用lambda也可以很方便的对map排序
  • Map.Entry.comparingByKey() 按key排序的Comparator
  • Map.Entry.comparingByValue()按value排序的Comparator
  1. 转载于 点击跳转

示例代码

  1. 如下
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.TreeMap;
import java.util.stream.Collectors;

public class MapSortDemo {
    public static void main(String[] args) {
        User user1 = new User("zs", 10);
        User user2 = new User("ls", 5);
        User user3 = new User("wu", 20);
        Map<String, User> map = new HashMap<>();
        map.put(user1.getName(), user1);
        map.put(user2.getName(), user2);
        map.put(user3.getName(), user3);

        System.out.println("------map sort by key------");
        map.entrySet().
                stream().
                sorted(Map.Entry.comparingByKey()).
                forEach(System.out::println);

        System.out.println("------map sort by value------");
        map.entrySet().
                stream().
                sorted(Map.Entry.comparingByValue()).
                forEach(System.out::println);


        System.out.println("------return sorted by key map ------");
        TreeMap<String,User> treeMap=new TreeMap<>(map);
        System.out.println(treeMap);

        System.out.println("------return sorted by value map ------");
        Map<String, User> result = map.entrySet()
                .stream()
                .sorted(Map.Entry.comparingByValue())
                .collect(Collectors.toMap(
                        Map.Entry::getKey,
                        Map.Entry::getValue,
                        (oldValue, newValue) -> oldValue, LinkedHashMap::new));
        System.out.println(result);
    }

}

class User implements Comparable<User> {
    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    private String name;
    private int 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;
    }

    @Override
    public int compareTo(User o) {
        return this.getAge() - o.getAge();
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
  1. 输出
------map sort by key------
ls=User{name='ls', age=5}
wu=User{name='wu', age=20}
zs=User{name='zs', age=10}
------map sort by value------
ls=User{name='ls', age=5}
zs=User{name='zs', age=10}
wu=User{name='wu', age=20}
------return sorted by key map ------
{ls=User{name='ls', age=5}, wu=User{name='wu', age=20}, zs=User{name='zs', age=10}}
------return sorted by value map ------
{ls=User{name='ls', age=5}, zs=User{name='zs', age=10}, wu=User{name='wu', age=20}}

标签:map,HashMap,lambda,Map,age,User,------,排序,name
From: https://www.cnblogs.com/Twittery/p/17728246.html

相关文章

  • 快速排序/选择算法
    ......
  • python 排序
    在您的代码中,排序函数中的`elem`是一个未定义的变量,因此会导致`NameError`错误。在Python中,`elem`不是一个内置变量,您需要使用实际的变量或表达式来代替。从您提供的数据和示例代码来看,您似乎希望按照每个子列表中的第一个元素进行排序。为了修复错误,您可以使用lambda函......
  • HashMap源码解析
    HashMap简介HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键,但最多只允许一条记录的键为null。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。HashMap是......
  • Java 8 Lambda 表达式解析
    Lambda表达式,也可称为闭包,它是推动Java8发布的最重要新特性。使用Lambda表达式可以使代码变的更加简洁紧凑。坦白的说,初次看见Lambda表达式瞬间头就大了,为了更好的理解,我们可以把Lambda表达式当作是一种匿名函数(对Java而言这并不完全正确,但现在姑且这么认为),简单地说,就是......
  • HashMap的实现原理
    HashMap的数据结构:底层使用hash表数据结构,即数组和链表或红黑树当我们往HashMap中put元素时,利用key的hashCode重新hash计算出当前对象元素在数组中的下标存储时,如果出现hash值相同的key,此时有两种情况如果key相同,则覆盖原始值如果key不同(出现冲突),则将当前的key-value放入链......
  • 轻松掌握冒泡排序算法,值得收藏
    冒泡排序(BubbleSort)是一种简单的排序算法,其基本思想是多次遍历待排序的数组,每次比较相邻的两个元素,如果它们的顺序不正确就交换它们,直到整个数组有序为止。冒泡排序的基本步骤如下:从数组的第一个元素开始,比较相邻的两个元素,如果它们的顺序不正确就交换它们。重复步骤1,直到遍历......
  • 简单而经典:Java中的冒泡排序算法详解
    当谈到简单的排序算法时,冒泡排序(BubbleSort)通常是其中之一。虽然它不是最高效的排序算法之一,但它的简单性和易于理解使它成为学习排序算法的良好起点。在本文中,我们将详细介绍Java中的冒泡排序。冒泡排序的基本原理冒泡排序(BubbleSort)是一种简单的排序算法,它通过多次遍历待排序的......
  • 【算法】归并排序算法
    归并排序归并排序的思想归并排序运用了典型的分治策略,是一种稳定的排序算法,其时间复杂度为\(O(nlogn)\),空间复杂度为\(O(n)\)。分治的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。......
  • PostgreSQL排序字段不唯一导致分页查询结果出现重复数据
    背景pg单字段排序,排序字段中可能会出现重复,这样就会导致我们在进行分页查询时会出现一些和预期不相符的现象,如这个数据在第一页出现了,然后再第二页又出现。复现步骤createtabletest_select_order_page_duplicate(idvarchar(36)notnullconstrainttest_select_order_pa......
  • HashMap常见面试题
    简介HashMap最早出现在JDK1.2中,底层基于散列算法实现。HashMap允许null键和null值,是非线程安全类,在多线程环境下可能会存在问题。1.8版本的HashMap数据结构:为什么有的是链表有的是红黑树?默认链表长度大于8时转为树结构Node是HhaspMap中的一个静态内部类://Node是单向链表,实现......