Java在线运行

版本:

所属目录
点击了解高性能代码运行API
运行结果
教程手册
代码仓库
极速运行
交互输入
极速运行模式,更高效的运行,点击编辑器上方的运行按钮即刻体验吧。
以下是用户最新保存的代码
for循环嵌套 发布于:2022-11-08 13:58 仿沙卡拉六级梯形金字塔(初版) 发布于:2022-11-08 10:25 测试变量变化 发布于:2022-11-06 22:18 二分查找:查找最后一个小于等于给定值的元素: 发布于:2022-11-06 00:13 二分查找:查找第一个大于等于给定值的元素: 发布于:2022-11-06 00:09 二分查找的变形 :查找最后一个值等于给定值的元素 发布于:2022-11-06 00:02 实现二分查找 发布于:2022-11-05 23:02 输出1-10之间的偶数(while) 发布于:2022-11-07 10:00 输出1-10之间所有偶数(for) 发布于:2022-11-07 10:02 输出1-10之间10个数的和 发布于:2022-11-05 16:06 输出1-10之间的10个整数 发布于:2022-11-05 16:04 跨银行交易系统 发布于:2022-11-05 15:40 收支系统verson 1.0 发布于:2022-11-05 14:09 求1到100奇数的和 发布于:2022-11-05 11:02 测试代码。 发布于:2022-11-04 09:35 交互输入一个三位数,分别输出这个三位数的个位、十位、百位。 发布于:2022-11-03 15:53 输入账户判断 发布于:2022-11-03 15:23 年轻人,你还是太嫩了 发布于:2022-11-03 13:04 空心金字塔 发布于:2022-11-02 15:58 我女神丽丽 发布于:2022-11-01 15:58 计数排序:2 5 3 0 2 3 0 3 发布于:2022-11-01 12:42 桶排序:78 17 39 26 72 94 21 12 23 68 发布于:2022-11-01 11:34 java用treeset集合实现不重复的数列 发布于:2022-11-01 08:42 获取用户信息 发布于:2022-10-31 12:22 ArrayList类银行取款 发布于:2022-10-31 11:54 FinalShell的离线机器码 发布于:2022-10-30 12:06 AAB前身代码 发布于:2022-10-29 20:35 查找AAB类型单词 发布于:2022-10-29 20:21 松岛枫是的肤色饭 发布于:2022-10-28 15:23 二维数组式 发布于:2022-10-26 20:24 java List 排序 数字字符串 发布于:2022-10-25 09:34 网络报文加密解密 发布于:2022-10-24 18:17 字符串变形 发布于:2022-10-24 18:16 归并排序实现 发布于:2022-10-23 22:34 快速排序实现: 发布于:2022-10-23 21:48 混合项目测试 发布于:2022-10-23 21:33 奇偶数之和判断 发布于:2022-10-23 20:25 解题:跳跃游戏(优先队列,大堆) 发布于:2022-10-23 17:03 分治法2-10-15-课堂练习-md.6 发布于:2022-10-20 19:58 java实现员工工资管理系统 发布于:2022-10-19 10:41 回文数递归法 发布于:2022-10-18 22:09 回文数递推法 发布于:2022-10-18 22:08 农民分土地 发布于:2022-10-18 16:07 字符串的输入,字符出现次数 发布于:2022-10-17 20:47 元音字母小写 发布于:2022-10-17 20:12 农民分土地递推实现: 发布于:2022-10-15 13:23 数组累加递推实现: 发布于:2022-10-15 13:15 数组累加递归实现: 发布于:2022-10-15 13:03 农民分土地递归实现: 发布于:2022-10-15 12:55 设计一个输出如下形式数值的递归算法 n n n n n … n … 3 3 3 2 2 1 发布于:2022-10-15 00:58 [更多]
显示目录

Java 8 新特性教程(全面介绍共40篇)



本套JAVA8教程暂时有大量英文内容, 中文翻译工作正在进行中。 > 如果你愿意翻译其中的小部份的内容,我们非常感谢你的付出。 而且操作非常简单, 你只需要标题附近的"修改教程"按钮然后就可以修改和保存了 ,不用担心被改坏了,我们后台有强大的对比审核工具,会确保教程的准确性。

Lambda表达式 : 排序例子

在这个例子中,我们将向你展示如何使用 Java 8 Lambda 表达式去书写一个 Comparator 来对一个List排序.

  1. 传统 Comparator 例子.
Comparator<developer> byName = new Comparator<developer>() {
        @Override
        public int compare(Developer o1, Developer o2) {
            return o1.getName().compareTo(o2.getName());
        }
    };
  1. Lambda 表达式这样操作.
Comparator<developer> byName = 
        (Developer o1, Developer o2)-&gt;o1.getName().compareTo(o2.getName());

1. 不使用Lambda来排序

使用 age 来比较Developer对象. 通常,你使用 Collections.sort 并通过一个匿名 Comparator类来排序,就像像下面这样 :

TestSorting.java

package com.mkyong.java8;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class TestSorting {

    public static void main(String[] args) {

        List<developer> listDevs = getDevelopers();

        System.out.println("Before Sort");
        for (Developer developer : listDevs) {
            System.out.println(developer);
        }

        //通过名age排序
        Collections.sort(listDevs, new Comparator<developer>() {
            @Override
            public int compare(Developer o1, Developer o2) {
                return o1.getAge() - o2.getAge();
            }
        });

        System.out.println("After Sort");
        for (Developer developer : listDevs) {
            System.out.println(developer);
        }

    }

    private static List<developer> getDevelopers() {

        List<developer> result = new ArrayList<developer>();

        result.add(new Developer("mkyong", new BigDecimal("70000"), 33));
        result.add(new Developer("alvin", new BigDecimal("80000"), 20));
        result.add(new Developer("jason", new BigDecimal("100000"), 10));
        result.add(new Developer("iris", new BigDecimal("170000"), 55));

        return result;

    }

}

Output

Before Sort
Developer [name=mkyong, salary=70000, age=33]
Developer [name=alvin, salary=80000, age=20]
Developer [name=jason, salary=100000, age=10]
Developer [name=iris, salary=170000, age=55]

After Sort
Developer [name=jason, salary=100000, age=10]
Developer [name=alvin, salary=80000, age=20]
Developer [name=mkyong, salary=70000, age=33]
Developer [name=iris, salary=170000, age=55]

当需要排序的数据发生变化的时候, 你只需要通过重写匿名 Comparator 类来实现 :

//通过age排序
    Collections.sort(listDevs, new Comparator<developer>() {
        @Override
        public int compare(Developer o1, Developer o2) {
            return o1.getAge() - o2.getAge();
        }
    });

    //通过name排序
    Collections.sort(listDevs, new Comparator<developer>() {
        @Override
        public int compare(Developer o1, Developer o2) {
            return o1.getName().compareTo(o2.getName());
        }
    });

    //通过Salary来排序
    Collections.sort(listDevs, new Comparator<developer>() {
        @Override
        public int compare(Developer o1, Developer o2) {
            return o1.getSalary().compareTo(o2.getSalary());
        }
    });

这样从逻辑上讲没有问题, 但是, 但是你想过没有,你为了只改变一行代码而创建了一个对象?

2. 通过Lambda排序

在 Java 8里面, List 接口支持直接使用sort方法,再也不需要使用Collections.sort.

//List.sort()
    listDevs.sort(new Comparator<developer>() {
        @Override
        public int compare(Developer o1, Developer o2) {
            return o2.getAge() - o1.getAge();
        }
    });

Lambda 表达式例子 :

TestSorting.java

package com.mkyong.java8;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

public class TestSorting {

    public static void main(String[] args) {

        List<developer> listDevs = getDevelopers();

        System.out.println("Before Sort");
        for (Developer developer : listDevs) {
            System.out.println(developer);
        }

        System.out.println("After Sort");

        //lambda 表达式!
        listDevs.sort((Developer o1, Developer o2)-&gt;o1.getAge()-o2.getAge());

        //java 8 , lambda也可以打印List
        listDevs.forEach((developer)-&gt;System.out.println(developer));
    }

    private static List<developer> getDevelopers() {

        List<developer> result = new ArrayList<developer>();

        result.add(new Developer("mkyong", new BigDecimal("70000"), 33));
        result.add(new Developer("alvin", new BigDecimal("80000"), 20));
        result.add(new Developer("jason", new BigDecimal("100000"), 10));
        result.add(new Developer("iris", new BigDecimal("170000"), 55));

        return result;

    }

}

Output

Before Sort
Developer [name=mkyong, salary=70000, age=33]
Developer [name=alvin, salary=80000, age=20]
Developer [name=jason, salary=100000, age=10]
Developer [name=iris, salary=170000, age=55]

After Sort
Developer [name=jason, salary=100000, age=10]
Developer [name=alvin, salary=80000, age=20]
Developer [name=mkyong, salary=70000, age=33]
Developer [name=iris, salary=170000, age=55]

3. 更多 Lambda 表达式

3.1 通过age排序

//sort by age
    Collections.sort(listDevs, new Comparator<developer>() {
        @Override
        public int compare(Developer o1, Developer o2) {
            return o1.getAge() - o2.getAge();
        }
    });

    //lambda
    listDevs.sort((Developer o1, Developer o2)-&gt;o1.getAge()-o2.getAge());

    //lambda, 泛型参数
    listDevs.sort((o1, o2)-&gt;o1.getAge()-o2.getAge());

3.2 通过name排序

//sort by name
    Collections.sort(listDevs, new Comparator<developer>() {
        @Override
        public int compare(Developer o1, Developer o2) {
            return o1.getName().compareTo(o2.getName());
        }
    });

    //lambda
    listDevs.sort((Developer o1, Developer o2)-&gt;o1.getName().compareTo(o2.getName()));        

    //lambda
    listDevs.sort((o1, o2)-&gt;o1.getName().compareTo(o2.getName()));

3.3 通过salary排序

//sort by salary
    Collections.sort(listDevs, new Comparator<developer>() {
        @Override
        public int compare(Developer o1, Developer o2) {
            return o1.getSalary().compareTo(o2.getSalary());
        }
    });                

    //lambda
    listDevs.sort((Developer o1, Developer o2)-&gt;o1.getSalary().compareTo(o2.getSalary()));

    //lambda
    listDevs.sort((o1, o2)-&gt;o1.getSalary().compareTo(o2.getSalary()));

3.4 颠倒排序.

3.4.1 Lambda 表达式通过salary排序.

Comparator<developer> salaryComparator = (o1, o2)-&gt;o1.getSalary().compareTo(o2.getSalary());
    listDevs.sort(salaryComparator);

Output

Developer [name=mkyong, salary=70000, age=33]
Developer [name=alvin, salary=80000, age=20]
Developer [name=jason, salary=100000, age=10]
Developer [name=iris, salary=170000, age=55]

3.4.2 Lambda 表达式通过salary倒序排序.

Comparator<developer> salaryComparator = (o1, o2)-&gt;o1.getSalary().compareTo(o2.getSalary());
    listDevs.sort(salaryComparator.reversed());

Output

Developer [name=iris, salary=170000, age=55]
Developer [name=jason, salary=100000, age=10]
Developer [name=alvin, salary=80000, age=20]
Developer [name=mkyong, salary=70000, age=33]

参考

  1. Start Using Java Lambda Expressions
  2. Oracle : Lambda Expressions
  3. [Oracle : Comparator][Oracle _ Comparator]

[Oracle _ Comparator]: https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html

由JSRUN为你提供的Java在线运行、在线编译工具
        JSRUN提供的Java 在线运行,Java 在线运行工具,基于linux操作系统环境提供线上编译和线上运行,具有运行快速,运行结果与常用开发、生产环境保持一致的特点。

title

使用此草稿 删除草稿

  • 00:23
注册登录后可减少验证码的弹出,点击前往 注册 | 登录

皮肤:

运行模式:

嵌入代码 iframe嵌入:


服务器已安装大部分常用的依赖库,但仍会存在一些未被安装的库, 可以通过本窗口立即安装所需依赖库,请确保库名正确,否则无法安装成功。


请输入依赖库的名称:

请选择语言: