温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java中怎么利用lambda表达式排序

发布时间:2021-07-02 14:02:06 来源:亿速云 阅读:1014 作者:Leah 栏目:编程语言

Java中怎么利用lambda表达式排序,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

1.lambda表达式排序

我们首先看几个比较常见的排序例子,基本数据类型的排序

    List list = Arrays.asList(1,3,2,5,4);
    list.sort(Comparator.naturalOrder());
    System.out.println(list);
    list.sort(Comparator.reverseOrder());
    System.out.println(list);
  
   输出结果:

    [1, 2, 3, 4, 5]
    [5, 4, 3, 2, 1]

我们可以看到执行结果是符合预期的,但是多数场景我们可能需要针对对象的某个属性进行排序,那么应该怎样做呢?我们看下边的例子:

public class Student {
    private String name;
    private String sexual;
    private Integer age;

    public Student(String name, String sexual,Integer age) {
        this.name = name;
        this.sexual = sexual;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSexual() {
        return sexual;
    }

    public void setSexual(String sexual) {
        this.sexual = sexual;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", sexual='" + sexual + '\'' +
                ", age=" + age +
                '}';
    }

public class Starter {
    public static void main(String[] args) {
        List<Student> list = Arrays.asList(
                new Student("jack", 12),
                new Student("john", 13),
                new Student("lily", 11),
                new Student("lucy", 10)
        );
        list.sort(Comparator.comparing(Student::getAge));
        System.out.println(list);
        list.sort(Comparator.comparing(Student::getAge).reversed());
        System.out.println(list);
    }
}

输出结果:

[Student{name='lucy', age=10}, Student{name='lily', age=11}, Student{name='jack', age=12}, Student{name='john', age=13}]
[Student{name='john', age=13}, Student{name='jack', age=12}, Student{name='lily', age=11}, Student{name='lucy', age=10}]

 如果我们需要按照性别分组再排序又该如何实现呢?我们接着看下边的例子

public class Starter {
    public static void main(String[] args) {
        List<Student> list = Arrays.asList(
                new Student("jack", "male", 12),
                new Student("john", "male", 13),
                new Student("lily", "female", 11),
                new Student("david", "male", 14),
                new Student("luck", "female", 13),
                new Student("jones", "female", 15),
                new Student("han", "male", 13),
                new Student("alice", "female", 11),
                new Student("li", "male", 12)
        );
 Map<String, List<Student>> groupMap = list.stream().sorted(Comparator.comparing(Student::getAge))
.collect(Collectors.groupingBy(Student::getSexual, Collectors.toList()));
        System.out.println(groupMap.toString());
    }
}

输出结果:

{
	female = [
      Student {
		name = 'lily', sexual = 'female', age = 11
	  }, 
      Student {
		name = 'alice', sexual = 'female', age = 11
	}, Student {
		name = 'luck', sexual = 'female', age = 13
	}, Student {
		name = 'jones', sexual = 'female', age = 15
	}],
   male = [
    Student {
		name = 'jack', sexual = 'male', age = 12
	}, Student {
		name = 'li', sexual = 'male', age = 12
	}, Student {
		name = 'john', sexual = 'male', age = 13
	}, Student {
		name = 'han', sexual = 'male', age = 13
	}, Student {
		name = 'david', sexual = 'male', age = 14
	}]
}

我们看到上边的输出结果存在一个问题,如果年龄相同则没有按照姓名排序,怎样实现这个功能呢?我们接着看下边的例子

Map<String, List<Student>> groupMap = list.stream().sorted(Comparator.comparing(Student::getAge)
.thenComparing(Student::getName)).collect(Collectors.groupingBy(Student::getSexual, Collectors.toList()));

输出结果:

{
	female = [
     Student {
		name = 'alice', sexual = 'female', age = 11
	}, Student {
		name = 'lily', sexual = 'female', age = 11
	}, Student {
		name = 'luck', sexual = 'female', age = 13
	}, Student {
		name = 'jones', sexual = 'female', age = 15
	}],
   male = [
     Student {
		name = 'jack', sexual = 'male', age = 12
	}, Student {
		name = 'li', sexual = 'male', age = 12
	}, Student {
		name = 'han', sexual = 'male', age = 13
	}, Student {
		name = 'john', sexual = 'male', age = 13
	}, Student {
		name = 'david', sexual = 'male', age = 14
	}]
}

关于Java中怎么利用lambda表达式排序问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI