我是靠谱客的博主 愤怒歌曲,最近开发中收集的这篇文章主要介绍比较器compareTo和compare()的lambda用法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

List的sort()方法通过改写compare()实现升序、降序

必须明确两点:

  1. compare(Integer e1, Integer e2){}返回的只有-1,0,1这些具体值,函数自己并不会对list进行排序。对list排序是因为有sort()对返回的值进行处理,规则为:1表示不交换位置,0表示相等时不交换,-1表示交换位置。
  2. compare(Integer e1, Integer e2){}中,e1代表的是List容器中的后一个元素,e2代表的是List容器中的前一个元素。
  //实现Comparator进行降序排序  
  Collections.sort(list, new Comparator<Object>(){   
  	@Override   
  	public int compare(Object o1, Object o2) {
  		//升序排序  return ((Student) o1).getAge() - ((Student) o2).getAge();   
  		return ((Student) o2).getAge() - ((Student) o1).getAge();   
  	}  
  });

在这里插入图片描述

字符串的compareTo的用法:

  1. 返回参与比较的前后两个字符串的asc码的差值,如果两个字符串首字母不同,则该方法返回首字母的asc码的差值。
     String a1 = "a";
        String a2 = "c";        
        System.out.println(a1.compareTo(a2));//结果为-2
  1. 参与比较的两个字符串如果首字符相同,则比较下一个字符,直到有不同的为止,返回该不同的字符的asc码差值。
     String a1 = "aa";
        String a2 = "ad";        
        System.out.println(a1.compareTo(a2));//结果为-3
  1. 如果两个字符串不一样长,可以参与比较的字符又完全一样,则返回两个字符串的长度差值。
     String a1 = "aa";
        String a2 = "aa12345678";        
        System.out.println(a1.compareTo(a2));//结果为-8
  1. Integer比较用compareTo()时:返回为正数表示a1>a2, 返回为负数表示a1<a2, 返回为0表示a1==a2。
      Integer x = 5;
      System.out.println(x.compareTo(3));  //1
      System.out.println(x.compareTo(5));  //0
      System.out.println(x.compareTo(8));  //-1

实际应用:
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。

解答:通过在排序时传入一个自定义的 Comparator 实现,重新定义 String 列表内的排序方法,若拼接 s1 + s2 > s2 + s1,那么显然应该把 s2 在拼接时放在前面,以此类推,将整个 String 列表排序后再拼接起来。

比较list中每两两元素的组合,组合得到的数越小,越是将其放在前面,代码如下:

//保证nums排序顺序为:s1s2 < s2s1
public String minNumber(int[] nums) {
    List<String> list = new ArrayList<>(nums.length);
    for (int e : nums) {
        list.add(String.valueOf(e));
    }
    //s1+s2 < s2+s1, 则返回1
    //1表示不交换位置,0表示相等时不交换,-1表示交换位置
    list.sort((s1, s2) -> (s1 + s2).compareTo(s2 + s1));
    StringBuilder result = new StringBuilder();
    list.forEach(e -> result.append(e));
    return result.toString();
}

我是pavel,一位憨憨傻傻的程序员,平时幽默又有才,专注于Java,go,微服务,云开发。不定时发送些腾讯程序员的工作/生活日常,请大家多多关注我的公众号!
在这里插入图片描述

最后

以上就是愤怒歌曲为你收集整理的比较器compareTo和compare()的lambda用法的全部内容,希望文章能够帮你解决比较器compareTo和compare()的lambda用法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部