博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java Lambda
阅读量:4540 次
发布时间:2019-06-08

本文共 7188 字,大约阅读时间需要 23 分钟。

源码

package com.keyba.example;import java.util.*;import java.util.function.Consumer;import java.util.function.Predicate;import java.util.stream.Collectors;public class LambdaTest {    public static void main(String[] args) {        String[] atp = {"Rafael Nadal", "Novak Djokovic", "Stanislas Wawrinka", "David Ferrer",                "Roger Federer", "Andy Murray", "Tomas Berdych", "Juan Martin Del Potro"};        List
players = Arrays.asList(atp); // 以前的循环方式 for (String player : players) { System.out.print(player + "; "); } System.out.println(); // 使用 lambda 表达式以及函数操作(functional operation) players.forEach((player) -> System.out.print(player + "; ")); System.out.println(); // 在 Java 8 中使用双冒号操作符(double colon operator) players.forEach(System.out::println); }}class AcceptMethod { public static void printValue(String str) { System.out.println("print value : " + str); }}class MyTest { public static void main(String[] args) { List
al = Arrays.asList("a", "b", "c", "d"); al.forEach(AcceptMethod::printValue); //下面的方法和上面等价的 Consumer
methodParam = AcceptMethod::printValue; //方法参数 al.forEach(x -> methodParam.accept(x));//方法执行accept }}class Employee { private String firstName, lastName, job, gender; private int salary, age; public Employee(String firstName, String lastName, String job, String gender, int age, int salary) { this.firstName = firstName; this.lastName = lastName; this.gender = gender; this.age = age; this.job = job; this.salary = salary; } public String getFirstName() { return firstName; } public String getLastName() { return lastName; } public String getJob() { return job; } public String getGender() { return gender; } public void setSalary(int salary) { this.salary = salary; } public int getSalary() { return salary; } public int getAge() { return age; } public static void main(String[] args) { List
javaProgrammers = new ArrayList
() { { add(new Employee("Elsdon", "Jaycob", "Java programmer", "male", 43, 2000)); add(new Employee("Tamsen", "Brittany", "Java programmer", "female", 23, 1500)); add(new Employee("Floyd", "Donny", "Java programmer", "male", 33, 1800)); add(new Employee("Sindy", "Jonie", "Java programmer", "female", 32, 1600)); add(new Employee("Vere", "Hervey", "Java programmer", "male", 22, 1200)); add(new Employee("Maude", "Jaimie", "Java programmer", "female", 27, 1900)); add(new Employee("Shawn", "Randall", "Java programmer", "male", 30, 2300)); add(new Employee("Jayden", "Corrina", "Java programmer", "female", 35, 1700)); add(new Employee("Palmer", "Dene", "Java programmer", "male", 33, 2000)); add(new Employee("Addison", "Pam", "Java programmer", "female", 34, 1300)); } }; System.out.println("所有程序员的姓名:"); javaProgrammers.forEach((p) -> System.out.printf("%s %s; ", p.getFirstName(), p.getLastName())); System.out.println(); System.out.println("给程序员加薪 5% :"); javaProgrammers.forEach(p -> System.out.printf(String.valueOf(p.getSalary()) + "; ")); Consumer
giveRaise = e -> e.setSalary(e.getSalary() / 100 * 5 + e.getSalary()); javaProgrammers.forEach(giveRaise); System.out.println(); javaProgrammers.forEach(p -> System.out.printf(String.valueOf(p.getSalary()) + "; ")); System.out.println(); System.out.println("下面是月薪超过 $1,400 的JAVA程序员:"); javaProgrammers.stream() .filter((p) -> (p.getSalary() > 1400)) .forEach((p) -> System.out.printf("%s %s %s; ", p.getFirstName(), p.getLastName(), p.getSalary())); System.out.println(); // 定义 filters Predicate
ageFilter = (p) -> (p.getAge() > 25); Predicate
salaryFilter = (p) -> (p.getSalary() > 1400); Predicate
genderFilter = (p) -> ("female".equals(p.getGender())); System.out.println("年龄大于 24岁的女性 Java programmers:"); javaProgrammers.stream() .filter(ageFilter) .filter(salaryFilter) .filter(genderFilter) .forEach((p) -> System.out.printf("%s %s; ", p.getFirstName(), p.getLastName())); System.out.println(); System.out.println("根据 salary 排序 Java programmers:"); List
sortedJavaProgrammers = javaProgrammers .stream() .sorted((p, p2) -> (p.getSalary() - p2.getSalary())) .limit(3) .collect(Collectors.toList()); sortedJavaProgrammers.forEach((p) -> System.out.printf("%s %s;%s %n", p.getFirstName(), p.getLastName(), p.getSalary())); System.out.println("将 Java programmers 的 first name 拼接成字符串:"); String javaDevelopers = javaProgrammers .stream() .map(Employee::getFirstName) .collect(Collectors.joining(" ; ")); // 在进一步的操作中可以作为标记(token) System.out.println(javaDevelopers); System.out.println("将 Java programmers 的 first name 存放到 Set:"); Set
javaDevFirstName = javaProgrammers .stream() .map(Employee::getFirstName) .collect(Collectors.toSet()); System.out.println(javaDevFirstName); System.out.println("将 Java programmers 的 first name 存放到 TreeSet:"); TreeSet
javaDevLastName = javaProgrammers .stream() .map(Employee::getLastName) .collect(Collectors.toCollection(TreeSet::new)); System.out.println(javaDevLastName); System.out.println("计算付给 Java programmers 的所有money:"); int totalSalary = javaProgrammers .parallelStream() .mapToInt(p -> p.getSalary()) .sum(); System.out.println(totalSalary); //计算 count, min, max, sum, and average for numbers List
numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); IntSummaryStatistics stats = numbers .stream() .mapToInt((x) -> x) .summaryStatistics(); System.out.println("List中最大的数字 : " + stats.getMax()); System.out.println("List中最小的数字 : " + stats.getMin()); System.out.println("所有数字的总和 : " + stats.getSum()); System.out.println("所有数字的平均值 : " + stats.getAverage()); }}

结果

所有程序员的姓名:Elsdon Jaycob; Tamsen Brittany; Floyd Donny; Sindy Jonie; Vere Hervey; Maude Jaimie; Shawn Randall; Jayden Corrina; Palmer Dene; Addison Pam; 给程序员加薪 5% :2000; 1500; 1800; 1600; 1200; 1900; 2300; 1700; 2000; 1300; 2100; 1575; 1890; 1680; 1260; 1995; 2415; 1785; 2100; 1365; 下面是月薪超过 $1,400 的JAVA程序员:Elsdon Jaycob 2100; Tamsen Brittany 1575; Floyd Donny 1890; Sindy Jonie 1680; Maude Jaimie 1995; Shawn Randall 2415; Jayden Corrina 1785; Palmer Dene 2100; 年龄大于 24岁的女性 Java programmers:Sindy Jonie; Maude Jaimie; Jayden Corrina; 根据 salary 排序 Java programmers:Vere Hervey;1260 Addison Pam;1365 Tamsen Brittany;1575 将 Java programmers 的 first name 拼接成字符串:Elsdon ; Tamsen ; Floyd ; Sindy ; Vere ; Maude ; Shawn ; Jayden ; Palmer ; Addison将 Java programmers 的 first name 存放到 Set:[Elsdon, Shawn, Palmer, Addison, Maude, Floyd, Vere, Tamsen, Jayden, Sindy]将 Java programmers 的 first name 存放到 TreeSet:[Brittany, Corrina, Dene, Donny, Hervey, Jaimie, Jaycob, Jonie, Pam, Randall]计算付给 Java programmers 的所有money:18165List中最大的数字 : 10List中最小的数字 : 1所有数字的总和   : 55所有数字的平均值 : 5.5

转载于:https://www.cnblogs.com/liehen2046/p/11058464.html

你可能感兴趣的文章
如何简单解释 MapReduce算法
查看>>
解决java.lang.NoClassDefFoundError: org/apache/log4j/Level
查看>>
端口号
查看>>
mysql for macOS安装
查看>>
语言基础
查看>>
C# : 操作Word文件的API - (将C# source中的xml注释转换成word文档)
查看>>
C#中字符串转换成枚举类型的方法
查看>>
Airplace平台
查看>>
TinyOS实例介绍
查看>>
我是怎么定义微服务平台?
查看>>
python random
查看>>
input输入框只允许输入数字/ 数字+小数点/ 文字+字母/ 等解决方法
查看>>
【翻译】西川善司「实验做出的游戏图形」「GUILTY GEAR Xrd -SIGN-」中实现的「纯卡通动画的实时3D图形」的秘密,前篇(2)...
查看>>
mysql 5.6 参数详解
查看>>
求旋转数组的最小元素
查看>>
Gson解析Json数组
查看>>
Lintcode: Fast Power
查看>>
Pocket Gem OA: Log Parser
查看>>
枚举也能直接转换为对应的数值输出
查看>>
angularjs1-7,供应商
查看>>