Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Java 8中使用lambda函数按键和值比较hashmap

在Java 8中使用lambda函数按键和值比较hashmap
EN

Stack Overflow用户
提问于 2020-12-28 06:15:54
回答 2查看 752关注 0票数 1

我是java8的新手,我想写一个按值对hashmap进行排序的函数,如果值也是按键排序的话。

要按值对哈希图进行排序,请执行以下操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Map<String, Integer> map1 = new LinkedHashMap<>();
                 map.entrySet()
                .stream()
                .sorted(Map.Entry.<String, Integer>comparingByValue().reversed())
                .forEachOrdered(x -> map1.put(x.getKey(), x.getValue()));       
    map1.forEach((k,v) ->{ System.out.println(k +" "+v);} );

我使用过Python3,它使用mapSorted = sorted(map.items()key = lambda item : (item[1], item[0]))对键和值进行排序。Java 8中也有类似的东西吗?

EN

回答 2

Stack Overflow用户

发布于 2020-12-28 07:56:10

您期待的接口是Comparator#thenComparing。这种排序的实现并不直接的原因是因为类型推断。

类型推断需要一些帮助,这些帮助可以提供,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Comparator.comparing(Map.Entry<String, Integer>::getValue)
                    .reversed().thenComparing(Map.Entry::getKey)

除此之外,理想情况下,您应该将输出收集到保留顺序的Map中,否则,排序将是计算的浪费。因此,这样的东西应该是有效的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
LinkedHashMap<String, Integer> sortedMap = map.entrySet()
            .stream()
            .sorted(Comparator.comparing(Map.Entry<String, Integer>::getValue)
                    .reversed().thenComparing(Map.Entry::getKey))
            .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
                    (a, b) -> a, LinkedHashMap::new));
票数 2
EN

Stack Overflow用户

发布于 2020-12-28 06:58:22

定义地图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        HashMap<String, Integer>map1 = new HashMap();
        map1.put("aa",5);
        map1.put("bbb",2);
        map1.put("ccccc",2);
        map1.put("dddddd",3);

排序,如果你想与字符串进行比较,你需要自己定义它

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        List<Entry<String, Integer>> collect = map1.entrySet().stream().sorted(new Comparator<Entry<String, Integer>>(){
            @Override
            public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
                int ll=0;
                if (o1.getValue()>o2.getValue()){
                    ll=-1;
                }
                else if(o1.getValue()<o2.getValue()){
                    ll=1;
                }
                else if (o1.getKey().length()>o2.getKey().length()) {
                    ll=-1;
                }
                else if (o1.getKey().length()<o2.getKey().length()) {
                    ll=1;
                };
                return ll;
            }
        }).collect(Collectors.toList());

结果类似于aa=5、dddddd=3、ccccc=2、bbb=2

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65473659

复制
相关文章
高阶函数和Java的Lambda
java 8引入了函数式编程。函数式编程重点在函数,函数变成了Java世界里的一等公民,函数和其他值一样,可以到处被定义,可以作为参数传入另一个函数,也可以作为函数的返回值,返回给调用者。利用这些特性,可以灵活组合已有函数形成新的函数,可以在更高层次上对问题进行抽象。
fengzhizi715
2018/08/24
1.9K0
高阶函数和Java的Lambda
java Integer值比较
所有相同类型的包装类对象之间的值比较,应该使用equals方法比较。 –来自阿里巴巴java开发手册。 先看个简单实例: public static void main(String[] args)throws Exception{ Integer a = -121; Integer b = -121; Integer c = 345; Integer d = 345; System.out.println(a
IT云清
2019/01/22
1.8K0
Java Lambda 解析和使用技巧
lambda 是包着一个函数的对象 lambda 表达式非常简洁优雅。是把动态语言的特性嫁接到静态语言的一个典范。
卢衍飞
2023/02/16
1K0
HashMap 计算 Hash 值的扰动函数
理论上 hash 散列是一个 int 值,如果直接拿出来作为下标访问 hashmap 的话,考虑到二进制 32 位,取值范围在-2147483648 ~ 2147483647。大概有 40 亿个 key , 只要哈希函数映射比较均匀松散,一般很难出现碰撞。
没有故事的陈师傅
2023/03/08
1.3K0
HashMap 计算 Hash 值的扰动函数
Java中int和Integer值之间相互比较
请同时参考文章https://www.joshua317.com/article/200
joshua317
2021/11/30
6130
Java中int和Integer值之间相互比较
Java函数式编程和Lambda表达式
相信大家都使用过面向对象的编程语言,面向对象编程是对数据进 行抽象,而函数式编程是对行为进行抽象。函数式编程让程序员能够写出更加容易阅读的代码。那什么时候函数式编程呢?
程序那些事
2020/07/08
7230
Java面试题:如何对HashMap按键值排序
Java中HashMap是一种用于存储“键”和“值”信息对的数据结构。不同于Array、ArrayList和LinkedLists,它不会维持插入元素的顺序。
哲洛不闹
2018/09/18
1.9K0
Java面试题:如何对HashMap按键值排序
Java 函数式编程和 lambda 表达式
函数式编程更多时候是一种编程的思维方式,是种方法论。函数式与命令式编程的区别主要在于:函数式编程是告诉代码你要做什么,而命令式编程则是告诉代码要怎么做。说白了,函数式编程是基于某种语法或调用API去进行编程。例如,我们现在需要从一组数字中,找出最小的那个数字,若使用用命令式编程实现这个需求的话,那么所编写的代码如下:
芋道源码
2018/10/26
1K0
如何使用Python的lambda、map和filter函数
Python lambda函数,又称匿名函数,与我们使用def…语句创建的函数不同,可以命名函数,lambda函数不需要名称。当需要一个快速且不需要经常重复使用的(通常是一个小的)函数时,它非常有用。单独使用Lambda函数可能没有太多意义。lambda函数的价值在于它在哪里与另一个函数(例如map()或filter())一起使用。
fanjy
2022/06/04
2.1K0
如何使用Python的lambda、map和filter函数
Python lambda和reduce函数
看到一篇博文写lambda和reduce函数。笔者小痒了一下,用Python实现一下:
全栈程序员站长
2022/01/27
3180
Stream流和Lambda表达式遍历HashMap
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/100725.html原文链接:https://javaforall.cn
全栈程序员站长
2022/06/30
2940
Java Lambda 和 Kotlin Lambda 的区别
Java 匿名内部类在编译时会创建一个 class ,增加类的加载开销,运行时该内部类无论是否用到外部参数每次都会生成该类的实例。jdk 1.8 后 lambda 的实现是在当前类增加一个私有静态方法,减少了类的开销
萬物並作吾以觀復
2021/11/24
2.5K0
Java字符串值比较
1 首先应该注意到作为成员变量的 name 是使用字面量直接赋值的 ( private String name ="abc"; ) 这种赋值的执行过程是先看字符串常量池中有没有 value 数组为 ['a', 'b', 'c'] 的 String 对象,如果没有的话就创建一个,有的话就拿到他的一个引用。
joshua317
2022/03/25
1.3K0
Java字符串值比较
Kotlin | 8.高阶函数:Lambda作为形参和返回值
本章内容包括: 函数类型 离阶函数及其在组织代码过程中的应用 内联函数 非局部返回和标签 重名函数 8.1 声明高阶函数 // 高阶函数就是以另一个函数作为参数或者返回值的函数。 val list = listOf(0, 1, 2, 3) println(list.filter { it > 0 }) /**-------------------- 8.1.1 函数类型 ----------------------*/
Jingbin
2021/03/02
1.1K0
【说站】BigDecimal值在java比较的两种方法
1、使用equals()方法不但要求两个BigDecimal的值相等,还要求它们的scale()相等。
很酷的站长
2022/11/23
7100
在Shell中使用日期运算和比较
脚本内容大概主要包括以下: 1、有且只有两个输入参数,都是必输项。 2、参数的格式是日期且格式是“yyyyMMdd"(如:20140101) 3、第二个参数一定要比第一个参数晚 4、最终的执行结果就是将两个日期区间的日期打印出来。
用户7108768
2021/10/31
1.7K0
HashMap 的初始值和最大值和扩容因子
HashMap 最大值是1 << 30。 << 这个是 Java 使用的移位操作符,运行的结果为 2^30,这个在源码的注释中已经明确说明。
HoneyMoose
2022/12/03
7610
HashMap 的初始值和最大值和扩容因子
Python匿名函数lambda的使用
在Python中,不通过def来声明函数名字,而是通过lambda关键字来定义的函数称为匿名函数。
Python碎片公众号
2021/02/26
3K0
Python匿名函数lambda的使用
如何使用Java8 Stream API对Map按键或值进行排序
在这篇文章中,您将学习如何使用Java对Map进行排序。前几日有位朋友面试遇到了这个问题,看似很简单的问题,但是如果不仔细研究一下也是很容易让人懵圈的面试题。所以我决定写这样一篇文章。在Java中,有多种方法可以对Map进行排序,但是我们将重点介绍Java 8 Stream,这是实现目标的一种非常优雅的方法。
字母哥博客
2020/09/23
7.3K0
如何使用Java8 Stream API对Map按键或值进行排序
使用函数对象与使用函数的比较
1.使用函数对象,可以让函数变得有状态。而且可以在运行期再初始化。 2.函数对象通常比寻常函数速度快。 template<int theValue> void add(int& elem){ elem += theValue; } class AddValue{ private: int theValue; public: AddValue(int v) : theValue(v){} void operator()(int& elem) const { e
forxtz
2020/10/10
1.1K0

相似问题

java:按键和值对hashmap进行排序

41

按键Java对HashMap排序

22

Java比较hashmap与arraylist的比较值

32

比较ArrayList值和HashMap值

23

Java HashMap按值排序,然后按键排序

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文