Java8-Lambda学习笔记

Java8学习笔记(二)—— Lambda表达式 Java8学习笔记系列: Java8学习笔记(一)—— 函数式编程的四个基本接口 Java8学习笔记(二)—— Lambda表达式 Java8学习笔记(三)—— Optional类的使用 Java8学习笔记(四) —— Stream流式编程 Java8学习笔记(五)—— 方法引用(::双冒号操作符) 一、什么是Lambda表达式 Lambda是Java8的一个语法糖,... 阅读详情

Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。
Lambda表达式还增强了集合库。 Java SE 8添加了2个对集合数据进行批量操作的包: java.util.function 包以及java.util.stream 包。 流(stream)就如同迭代器(iterator),但附加了许多额外的功能。 总的来说,lambda表达式和 stream 是自Java语言添加泛型(Generics)和注解(annotation)以来最大的变化。 在本文中,我们将从简单到复杂的示例中见认识lambda表达式和stream的强悍。

Lambda表达式的语法

基本语法:
(parameters) -> expression
或
(parameters) ->{ statements; }

Java lambda表达式的简单实例:

// 1. 不需要参数,返回值为 7 
() -> 7  
  
// 2. 接收一个参数(数字类型),返回其2倍的值  
x -> 2 * x  
  
// 3. 接受2个参数(数字),并返回他们的差值  
(x, y) -> x – y  
  
// 4. 接收2个int型整数,返回他们的和  
(int x, int y) -> x + y  
  
// 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)  
(String s) -> System.out.print(s)

基本的Lambda例子

到这里我们了解到Lambda的基本语法,可以得知lambda表达式如何影响我们编码的方式。 假设有一个玩家List ,程序员可以使用 for 语句 ("for 循环")来遍历,在Java SE 8中可以转换为另一种形式:

String[] atp = { "Rafael Nadal", "Novak Djokovic",  
                 "Stanislas Wawrinka","David Ferrer","Roger Federer",  
                 "Andy Murray","Tomas Berdych",  
                 "Juan Martin Del Potro" };  
List<String> players =  Arrays.asList(atp);  
  
// Java7的循环方式  
for (String player : players) {  
     System.out.print(player + "; ");  
}  
  
// 使用 lambda 表达式以及函数操作(functional operation)  
players.forEach((player) -> System.out.print(player + "; "));  
   
// 在 Java 8 中使用双冒号操作符(double colon operator)  
players.forEach(System.out::println);

正如上,lambda表达式可以将我们的代码缩减到一行。 另一个例子是在图形用户界面程序中,匿名类可以使用lambda表达式来代替。 同样,在实现Runnable接口时也可以这样使用:

// 使用匿名内部类  
btn.setOnAction(new EventHandler<ActionEvent>() {  
          @Override  
          public void handle(ActionEvent event) {  
              System.out.println("lamdba test!");   
          }  
    });  
   
// 或者使用 lambda expression  
btn.setOnAction(event -> System.out.println("lamdba test!"));

下面是使用lambdas 来实现 Runnable接口 的示例:

// 1.1使用匿名内部类  
new Thread(new Runnable() {  
    @Override  
    public void run() {  
        System.out.println("Hello world !");  
    }  
}).start();  
  
// 1.2使用 lambda expression  
new Thread(() -> System.out.println("Hello world !")).start();  
  
// 2.1使用匿名内部类  
Runnable race1 = new Runnable() {  
    @Override  
    public void run() {  
        System.out.println("Hello world !");  
    }  
};  
  
// 2.2使用 lambda expression  
Runnable race2 = () -> System.out.println("Hello world !");  
   
// 直接调用 run 方法(2.x中是没开新线程的哦!)  
race1.run();  
race2.run();

Runnable 的 lambda表达式,使用块格式,将五行代码转换成单行语句。 接下来,在下一节中我们将使用lambdas对集合进行排序。
使用Lambdas排序集合
在Java中,Comparator 类被用来排序集合。 在下面的例子中,我们将根据球员的 name, surname, name 长度 以及最后一个字母。 和前面的示例一样,先使用匿名内部类来排序,然后再使用lambda表达式精简我们的代码。
在第一个例子中,我们将根据name来排序list。 使用旧的方式,代码如下所示:

String[] players = {"Rafael Nadal", "Novak Djokovic",   
    "Stanislas Wawrinka", "David Ferrer",  
    "Roger Federer", "Andy Murray",  
    "Tomas Berdych", "Juan Martin Del Potro",  
    "Richard Gasquet", "John Isner"};  
   
// 1.1 使用匿名内部类根据 name 排序 players  
Arrays.sort(players, new Comparator<String>() {  
    @Override  
    public int compare(String s1, String s2) {  
        return (s1.compareTo(s2));  
    }  
});

使用lambdas,可以通过下面的代码实现同样的功能:

// 1.2 使用 lambda expression 排序 players  
Comparator<String> sortByName = (String s1, String s2) -> (s1.compareTo(s2));  
Arrays.sort(players, sortByName);  
  
// 1.3 也可以采用如下形式:  
Arrays.sort(players, (String s1, String s2) -> (s1.compareTo(s2)));  

其他的排序如下所示。 和上面的示例一样,代码分别通过匿名内部类和一些lambda表达式来实现Comparator :

// 1.1 使用匿名内部类根据 surname 排序 players  
Arrays.sort(players, new Comparator<String>() {  
    @Override  
    public int compare(String s1, String s2) {  
        return (s1.substring(s1.indexOf(" ")).compareTo(s2.substring(s2.indexOf(" "))));  
    }  
});  
  
// 1.2 使用 lambda expression 排序,根据 surname  
Comparator<String> sortBySurname = (String s1, String s2) ->   
    ( s1.substring(s1.indexOf(" ")).compareTo( s2.substring(s2.indexOf(" ")) ) );  
Arrays.sort(players, sortBySurname);  
  
// 1.3 或者这样,怀疑原作者是不是想错了,括号好多...  
Arrays.sort(players, (String s1, String s2) ->   
      ( s1.substring(s1.indexOf(" ")).compareTo( s2.substring(s2.indexOf(" ")) ) )   
    );  
  
// 2.1 使用匿名内部类根据 name lenght 排序 players  
Arrays.sort(players, new Comparator<String>() {  
    @Override  
    public int compare(String s1, String s2) {  
        return (s1.length() - s2.length());  
    }  
});  
  
// 2.2 使用 lambda expression 排序,根据 name lenght  
Comparator<String> sortByNameLenght = (String s1, String s2) -> (s1.length() - s2.length());  
Arrays.sort(players, sortByNameLenght);  
  
// 2.3 or this  
Arrays.sort(players, (String s1, String s2) -> (s1.length() - s2.length()));  
  
// 3.1 使用匿名内部类排序 players, 根据最后一个字母  
Arrays.sort(players, new Comparator<String>() {  
    @Override  
    public int compare(String s1, String s2) {  
        return (s1.charAt(s1.length() - 1) - s2.charAt(s2.length() - 1));  
    }  
});  
  
// 3.2 使用 lambda expression 排序,根据最后一个字母  
Comparator<String> sortByLastLetter =   
    (String s1, String s2) ->   
        (s1.charAt(s1.length() - 1) - s2.charAt(s2.length() - 1));  
Arrays.sort(players, sortByLastLetter);  
  
// 3.3 or this  
Arrays.sort(players, (String s1, String s2) -> (s1.charAt(s1.length() - 1) - s2.charAt(s2.length() - 1)));

就是这样,简洁又直观。 后面我们将探索更多lambdas的能力,并将其与 stream 结合起来使用。
使用Lambdas和Streams
Stream是对集合的包装,通常和lambda一起使用。 使用lambdas可以支持许多操作,如 map, filter, limit, sorted, count, min, max, sum, collect 等等。 同样,Stream使用懒运算,他们并不会真正地读取所有数据,遇到像getFirst() 这样的方法就会结束链式语法。 在接下来的例子中,我们将探索lambdas和streams 能做什么。 我们创建了一个Person类并使用这个类来添加一些数据到list中,将用于进一步流操作。 Person 只是一个简单的POJO类:

@Setter
@Getter
@AllArgsConstructor
public class Person {  
   private String firstName, lastName, job, gender;  
   private int salary, age;  
}

接下来,我们将创建两个list,都用来存放Person对象:

List<Person> javaProgrammers = new ArrayList<Person>() {  
  {  
    add(new Person("Elsdon", "Jaycob", "Java programmer", "male", 43, 2000));  
    add(new Person("Tamsen", "Brittany", "Java programmer", "female", 23, 1500));  
    add(new Person("Floyd", "Donny", "Java programmer", "male", 33, 1800));  
    add(new Person("Sindy", "Jonie", "Java programmer", "female", 32, 1600));  
    add(new Person("Vere", "Hervey", "Java programmer", "male", 22, 1200));  
    add(new Person("Maude", "Jaimie", "Java programmer", "female", 27, 1900));  
    add(new Person("Shawn", "Randall", "Java programmer", "male", 30, 2300));  
    add(new Person("Jayden", "Corrina", "Java programmer", "female", 35, 1700));  
    add(new Person("Palmer", "Dene", "Java programmer", "male", 33, 2000));  
    add(new Person("Addison", "Pam", "Java programmer", "female", 34, 1300));  
  }  
};  
  
List<Person> phpProgrammers = new ArrayList<Person>() {  
  {  
    add(new Person("Jarrod", "Pace", "PHP programmer", "male", 34, 1550));  
    add(new Person("Clarette", "Cicely", "PHP programmer", "female", 23, 1200));  
    add(new Person("Victor", "Channing", "PHP programmer", "male", 32, 1600));  
    add(new Person("Tori", "Sheryl", "PHP programmer", "female", 21, 1000));  
    add(new Person("Osborne", "Shad", "PHP programmer", "male", 32, 1100));  
    add(new Person("Rosalind", "Layla", "PHP programmer", "female", 25, 1300));  
    add(new Person("Fraser", "Hewie", "PHP programmer", "male", 36, 1100));  
    add(new Person("Quinn", "Tamara", "PHP programmer", "female", 21, 1000));  
    add(new Person("Alvin", "Lance", "PHP programmer", "male", 38, 1600));  
    add(new Person("Evonne", "Shari", "PHP programmer", "female", 40, 1800));  
  }  
};

现在我们使用forEach方法来迭代输出上述列表:

System.out.println("程序员的姓名:");  
javaProgrammers.forEach((p) -> System.out.printf("%s %s; ", p.getFirstName(), p.getLastName()));  
phpProgrammers.forEach((p) -> System.out.printf("%s %s; ", p.getFirstName(), p.getLastName())); 

我们同样使用forEach方法,增加程序员的工资5%:

System.out.println("给程序员加薪 5% :");  
Consumer<Person> giveRaise = e -> e.setSalary(e.getSalary() / 100 * 5 + e.getSalary());  
  
javaProgrammers.forEach(giveRaise);  
phpProgrammers.forEach(giveRaise); 

另一个有用的方法是过滤器filter() ,让我们显示月薪超过1400美元的PHP程序员:

System.out.println("下面是月薪超过 $1,400 的PHP程序员:")  
phpProgrammers.stream()  
          .filter((p) -> (p.getSalary() > 1400))  
          .forEach((p) -> System.out.printf("%s %s; ", p.getFirstName(), p.getLastName()));  

我们也可以定义过滤器,然后重用它们来执行其他操作:

// 定义 filters  
Predicate<Person> ageFilter = (p) -> (p.getAge() > 25);  
Predicate<Person> salaryFilter = (p) -> (p.getSalary() > 1400);  
Predicate<Person> genderFilter = (p) -> ("female".equals(p.getGender()));  
  
System.out.println("下面是年龄大于 24岁且月薪在$1,400以上的女PHP程序员:");  
phpProgrammers.stream()  
          .filter(ageFilter)  
          .filter(salaryFilter)  
          .filter(genderFilter)  
          .forEach((p) -> System.out.printf("%s %s; ", p.getFirstName(), p.getLastName()));  
  
// 重用filters  
System.out.println("年龄大于 24岁的女性 Java programmers:");  
javaProgrammers.stream()  
          .filter(ageFilter)  
          .filter(genderFilter)  
          .forEach((p) -> System.out.printf("%s %s; ", p.getFirstName(), p.getLastName()));
System.out.println("最前面的3个 Java programmers:");  
javaProgrammers.stream()  
          .limit(3)  
          .forEach((p) -> System.out.printf("%s %s; ", p.getFirstName(), p.getLastName()));  
  
  
System.out.println("最前面的3个女性 Java programmers:");  
javaProgrammers.stream()  
          .filter(genderFilter)  
          .limit(3)  
          .forEach((p) -> System.out.printf("%s %s; ", p.getFirstName(), p.getLastName()));

排序呢? 我们在stream中能处理吗? 答案是肯定的。 在下面的例子中,我们将根据名字和薪水排序Java程序员,放到一个list中,然后显示列表:

System.out.println("根据 name 排序,并显示前5个 Java programmers:");  
List<Person> sortedJavaProgrammers = javaProgrammers  
          .stream()  
          .sorted((p, p2) -> (p.getFirstName().compareTo(p2.getFirstName())))  
          .limit(5)  
          .collect(toList());  
  
sortedJavaProgrammers.forEach((p) -> System.out.printf("%s %s; %n", p.getFirstName(), p.getLastName()));  
   
System.out.println("根据 salary 排序 Java programmers:");  
sortedJavaProgrammers = javaProgrammers  
          .stream()  
          .sorted( (p, p2) -> (p.getSalary() - p2.getSalary()) )  
          .collect( toList() );  
  
sortedJavaProgrammers.forEach((p) -> System.out.printf("%s %s; %n", p.getFirstName(), p.getLastName()));

如果我们只对最低和最高的薪水感兴趣,比排序后选择第一个/最后一个 更快的是min和max方法:

System.out.println("工资最低的 Java programmer:");  
Person pers = javaProgrammers  
          .stream()  
          .min((p1, p2) -> (p1.getSalary() - p2.getSalary()))  
          .get()  
  
System.out.printf("Name: %s %s; Salary: $%,d.", pers.getFirstName(), pers.getLastName(), pers.getSalary())  
  
System.out.println("工资最高的 Java programmer:");  
Person person = javaProgrammers  
          .stream()  
          .max((p, p2) -> (p.getSalary() - p2.getSalary()))  
          .get()  
  
System.out.printf("Name: %s %s; Salary: $%,d.", person.getFirstName(), person.getLastName(), person.getSalary())

上面的例子中我们已经看到 collect 方法是如何工作的。 结合 map 方法,我们可以使用 collect 方法来将我们的结果集放到一个字符串,一个 Set 或一个TreeSet中:

System.out.println("将 PHP programmers 的 first name 拼接成字符串:");  
String phpDevelopers = phpProgrammers  
          .stream()  
          .map(Person::getFirstName)  
          .collect(joining(" ; ")); // 在进一步的操作中可以作为标记(token)     
  
System.out.println("将 Java programmers 的 first name 存放到 Set:");  
Set<String> javaDevFirstName = javaProgrammers  
          .stream()  
          .map(Person::getFirstName)  
          .collect(toSet());  
  
System.out.println("将 Java programmers 的 first name 存放到 TreeSet:");  
TreeSet<String> javaDevLastName = javaProgrammers  
          .stream()  
          .map(Person::getLastName)  
          .collect(toCollection(TreeSet::new));

Streams 还可以是并行的(parallel)。 示例如下:

System.out.println("计算付给 Java programmers 的所有money:");  
int totalSalary = javaProgrammers  
          .parallelStream()  
          .mapToInt(p -> p.getSalary())  
          .sum(); 

我们可以使用summaryStatistics方法获得stream 中元素的各种汇总数据。 接下来,我们可以访问这些方法,比如getMax, getMin, getSum或getAverage:

//计算 count, min, max, sum, and average for numbers  
List<Integer> 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());

总结
lambda写代码会非常有feel,以上介绍了使用lambdas和streams的从简单到复杂的示例。 此外,还学习了如何使用lambda表达式与Comparator 类来对Java集合进行排序。

飞书应用开发脚手架lark-harness:从零构建企业级机器人 在构建企业级应用时,开发脚手架是提升工程效率和规范性的关键工具。其核心原理在于通过预设的项目模板、最佳实践和通用模块封装,自动化处理项目初始化、配置管理和基础架构搭建。这种技术价值在于将开发者从重复性劳动中解放出来,确保团队技术栈统一,并降低维护成本。在Node.js生态中,脚手架常与Express或Koa等Web框架结合,用于快速构建Web服务、API接口和实时事件处理系统。具体到飞书开放平台开发场景,开发者需要处理OAuth 2.0授权、事件订阅验证、消息加解密等复杂且标准的流程。lark-harnes 阅读详情

相关推荐

AI Agent在智能投研中的实战:多智能体信息整合与策略生成

那么,什么是AI Agent?简单来说,AI Agent是一种能够感知环境、做出决策并采取行动的自主系统。自主性:能够在没有人类直接干预的情况下运行,对自己的行为和内部状态有一定的控制权。反应性:能够感知环境的变化,并及时做出反应。主动性:不仅能够对环境变化做出反应,还能够主动地设定目标并采取行动实现这些目标。社会性:能够与其他Agent(包括人类和人工智能)进行交互、协作和竞争。它们可以全天候不间断地监控和处理海量信息,大大提升信息处理能力;

AI大模型应用之禅 188

java8 lambda学习分享

lambda学习经验分享(由邮件中copy,可以跟着思路,但不必揪其中类名不懂)lambda的组成:表达式分为三个部分组成    1)参数列表   2)箭头 -&gt;  3) lambda主体语法规则(parameters) -&gt;  expression  (parameters)    -&gt; { statements;}lambda学习之前你需要了解的理论知识(简单概括):1)行为...

Mark_Xu的博客 1008

深入剖析一个卷积块(ConvBlock)

深入剖析一个卷积块(ConvBlock)

qq_45670407的博客 1920

Java8学习--Lambda表达式

文章目录一、简介二、初识Lambda三、Lambda基础语法1.箭头操作符2.语法格式 一、简介 Lambda是一个匿名函数,我们可以把Lambda理解为一段可以传递的代码(将代码像数据一样传递)。 二、初识Lambda import sun.security.mscapi.CPublicKey; import java.util.*; public class Lambda { public static void main(String[] args) { // 匿名内部类写法

maruijiego 355

生信人填坑记 orthofinder的安装和基础使用

其中常用的有两个结果,第一个是Orthogroups文件夹下的Orthogroups.GeneCount.tsv,这个文件里保存着每个家族在每个物种里的成员数量。(写到这儿饭点到了,吃饭要紧…在国内使用conda的同学我相信很多人都会遇到-|- -|- -|- -|- -|- -|- -|- -|- 一直转圈。软件的是由很简单,将你要跑的物种的蛋白质文件放在work/data目录下,文件名都用物种缩写,后缀统一就行。当然,很多软件都会自带一个这样的文件,conda装不了的时候可以去软件官网溜达溜达。

qq_43337286的博客 5381

K-L展开 (Karhunen-Loeve expansion)

K-L变换

susan_wang1的博客 2万+

【Java8】 lambda 特性讲解

Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用 Lambda 表达式可以使代码变的更加简洁紧凑。跟Scala有点类似,因为 scala底层跟Java底层用的同一个JVM,都是马丁写的。Java8新特性待学习。 语法 lambda 表达式的语法格式如下:(parameters) -&gt...

sowhat 5万+

Polymarket链上预测市场自动化交易代理开发实战指南

自动化交易代理是量化交易的核心工具,它通过预设的算法规则,自动执行市场分析、决策与下单操作,旨在提升交易效率与纪律性。其技术原理通常涉及实时数据获取、策略引擎计算、交易执行与风险管理等模块的协同工作。在区块链与DeFi领域,这类代理的价值尤为凸显,能够高效处理链上合约交互,捕捉去中心化市场的套利机会。具体到应用场景,链上预测市场如Polymarket,为自动化策略提供了丰富的博弈标的。本文以Polymarket交易代理项目为例,深入剖析其基于Node.js与ethers.js的技术栈实现,详解从环境配置、策

weixin_42533910的博客 581

Java8的Lambda学习

Java8的Lambda学习

qinxun2008081的博客 150

python编程实现制作网络流量监控动画

c,实时显示网络带宽使用情况,用柱状图或折线图表示不同时间段的流量变化。通过 Python编程实现图形库(如 Pygame、Tkinter、Matplotlib 等)来实现计算机网络基础概念的可视化动画。global bars # 声明 bars 为全局变量。# 获取当前网络流量。# 创建图形和坐标轴。

qq_42788199的博客 718

深入解析LinuxCNC源码:从界面开发到硬件交互

本文深入解析LinuxCNC开源数控系统的源码架构与二次开发实践。详细介绍了从GTK+界面定制、Python脚本绑定,到硬件抽象层(HAL)配置与核心运动控制模块的完整开发流程。通过实战案例,帮助开发者掌握如何基于LinuxCNC源码进行界面开发和硬件交互定制,实现个性化数控系统。

weixin_29164843的博客 540

java8 之Lambdas篇

了解Java8 中的lambda表达式 对开发人员来说没有什么比自己选择的语言或平台发布新版本更令人激动了。Java开发者也不例外。实际上,我们更期待新版本的发布,有一部分原因是 因为在不久前我们还在考虑Java的前途,因为Java的创造者——Sun在衰落。一次与死亡的擦肩而过会使人更加珍惜生命。但在这种情况下,我们的热情 来源不像以前发布版本时那样,这次是来源于事实。Java 8最终会获得一些...

weixin_34066347的博客 230

JavaSwing_4.2: JDialog、JOptionPane(对话框)

JDialog,对话框。使用 JDialog 类可以创建自定义有的对话框,或者调用 JOptionPane 中的多个静态方法快速创建各种标准的对话框。JOptionPane是 JavaSwing 内部已实现好的,以静态方法的形式提供调用,能够快速方便的弹出要求用户提供值或向其发出通知的标准对话框。

谢TS的博客 7万+

java8 lambda python_【学习笔记】java8 Lambda表达式语法及应用

本文是慕课网大牧莫邪老师的视频教程一课掌握Lambda表达式语法及应用的学习笔记。如果觉得内容对你有用,可以购买老师的课程支持一下,课程价格1元,十分良心了。1. 课程介绍2. 为什么引入Lambda表达式2.1 什么是Lambda表达式Lambda表达式也称箭头函数、匿名函数、闭包Lambda表达式体现的是轻量级函数式编程思想-> 符号是Lambda表达式核心操作符号,符号左侧是操作参数,...

weixin_39612677的博客 268

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

java8学习笔记-Lambda表达式

Lambda 表达式是一个匿名函数(指的是没有函数名的函数),直接对应于其中的 Lambda 抽象,Lambda 表达式可以表示闭包。我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码作为实参),也可以理解为函数式编程,将一个函数作为参数进行传递。可以直接引用Java类或对象的方法,它可以被看成是一种更加简介易懂的Lambda表达式,使用方法引用后,代码可以更加简洁的编写。可以看到 (Global a, Global b) 可以省略Global 类型变成 (a, b)

nimqbiyq的博客 390

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

java8 lambda 学习笔记

lambda表达式 public class LambdaTest { public static void main(String[] args) { /** * 示例 * 原始方式 */ Runnable runnable = new Runnable() { @Override public void run() { Syst

qq_38342524的博客 188

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

java8-Lambda学习笔记

Lambda表达式 lambda表达式简介 ​ lambda表达式是从java8开始引入的,目的主要是为了简化代码,允许把函数作为⼀个⽅法的参数传递进⽅法中。在java8之前通常使用的是匿名类,但匿名类的问题是:如果匿名类的实现非常简单(例如仅包含一个方法的接口),则匿名类的语法可能看起来笨拙且不清楚,而且不能将一个函数(方法)作为参数传递给另一个方法。而使用Lambda表达式使您能够执行此操作,将功能视为方法参数,或将代码视为数据。 ​ Lambda表达式是⼀种匿名函数(对Java⽽⾔这并不完全准确)

qq_40805720的博客 270

[Java 8]Lambda学习笔记

在学习Lambda的时候, 我参考的文章是:https://www.cnblogs.com/coprince/p/8692972.html 其中有一个示例是 public static void main(String[] args){ List<String> languages = Arrays.asList("Java", "Scala", "C++", "...

中年油腻男人的转型之路 281

JAVA 8之lambda学习笔记

JAVA 8 都出了很久了,一直还没用过lambda表达式,记录一下学习的小Demo Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。 Java 8的一...

sishuiliuniany10的博客 510

Java 8 Lambda学习笔记(一)

一直感觉Lambda表达式是十分“高大上”的一种技术,不管是冲着其本身可以将代码量缩短至变态的缘故,还是希望拿来当做装逼神器的工具(开玩笑!),都值得好好学习一波。 好了,言归正传!Lambda表达式的格式不外乎如下: (parameters) -> expression 或 (parameters) ->{ statements; } 语法格式和传统的方法其实一...

Beat_IT的博客 362

Java 8 学习笔记之lambda

一、基本介绍 lambda表达式,即带有参数的表达式,是Java 8新出的用来替代匿名内部类的新功能,可以提高代码可读性,减少代码冗余。 二、基本语法 lambda表达式的基本格式为(x1,x2)-&gt;{表达式…}; 参数数据类型可以省略; 参数列表:参数可以为多个,为一个的时候左右括号可以省略,也可以无参数,括号不可省略; 表达式为一行是括号可以省略。 三、代码实例 imp...

萌鑫学习的博客 180

Java8学习笔记 — 【Lambda表达式】

1、Lambda表达式介绍 Lambda表达式是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码(将代码像数据一样传输),这样就可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java语言表达能力得到提升。 2、Lambda表达式入门示例 需求:获取公司中员工年龄大于35岁的员工信息。 员工类:Employee.java public class E

it_Shine的博客 571

Java8学习笔记之Lambda表达式

文章目录一.前言二.Lambda介绍1.引子--行为参数化传递代码2.Lambda表达式简介3.函数式接口4.使用局部变量5.方法引用与构造器引用5.1.指向静态方法的方法引用(引用类方法)5.2.指向任意类型实例方法的方法引用5.3.指向现有对象(特定对象)的实例方法的方法引用5.4.引用构造器6.Lambda表达式复合7.Lambda表达式与匿名内部类的联系和区别 一.前言 从2014年3月Java8发布到2020年3月17日Java14正式GA,Java版本更新迭代很快。但是公司的一些在维护的旧项目还

Java开发 400

JAVA SE 8 学习笔记(一)lambda表达式

1. Lamda表达式 Lamda表达式是一段可以传递的代码,可以被执行多次。 语法:(参数..)  -> {表达式} 例: (String first, String second) -> {if(first.length() 如果参数只有一个可以省略小括号 如果没有参数可以提供一堆空的小括号 如果参数类型可以被推导,那么可以省略参数类型 如果代码块

呵呵哈哈 907

【安卓学习笔记】Android Studio 中Gradle配置java8以及对lambda的支持

《疯狂Android讲义》中写的代码有使用到lambda表达式,这是Java8才加入的,但是在编译的时候默认是不支持的。 使用Java8编译 一、Project的Gradle配置文件修改 首先在Android Studio 中打开Project的Gradle配置文件 在dependencies下加入下列代码 classpath 'me.tatarka:gradle-retrolambda:3...

edcjyy的博客 1114

Java 8 Lambda 学习笔记(一)

1.函数式编程在java里面方法体不能独立存在,在java 8 以前可以使用匿名内部类来弥补这一缺陷,但使用匿名内部类也有缺点,那就是会使得代码显得比较臃肿。现在我们可以使用Lambda表达式来解决这一现状。下面来通过一个完整的例子来解释这种区别,该例子的主要功能为从一个list中选出符合要求的元素并组成一个新的list,并且删选条件是可扩展的。2.样例import java.util.ArrayL

EthanTang的博客 265
上一篇: springboot集成validation校验包案例
下一篇: springboot+elasticSearch实现数据高效搜索
splendor.s
博客等级 码龄10年 91粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值