lambda表达式,java双冒号(::)示例详解

双冒号(::)主要使用形式包括:

类名::实例方法

对象::实例方法

下面通过代码示例,详细解说。

双冒号(::)和 箭头函数(->)一并展示如下:

如:HashMap::new  等同于  ( ) -> new HashMap()

 1 public class Test {
 2
 3     // 实例对象引用实例方法
 4     Supplier<String> supplier1 = "lowerCase"::toUpperCase;
 5     Supplier<String> supplier1_1 = () -> "lowerCase".toUpperCase();
 6
 7     // 类引用(无参)构造函数
 8     Supplier<String> supplier2 = String::new;
 9     Supplier<String> supplier2_1 = () -> new String();
10
11     // 类引用(有参)构造函数
12     Function<String, String> function1 = String::new;
13     Function<String, String> function1_1 = (String str) -> new String(str);
14
15     // 类引用实例方法,入参为传入实例对象,入参、出参同类型
16     Function<String, String> function2 = String::toUpperCase;
17     Function<String, String> function2_1 = (String str) -> str.toUpperCase();
18
19     // Predicate<T>可理解为特殊的Function<T, Boolean>
20
21     Person person = new Person();
22     // 须为无参静态方法
23     Supplier<Boolean> supplierBln = Person::isTest;
24     Supplier<Boolean> supplierBln_1 = () -> Person.isTest();
25
26     // 实例对象调用实例方法
27     Supplier<String> supplierStr = person::getName;
28     Supplier<String> supplierStr_1 = () -> person.getName();
29
30     // 无参构造函数
31     Supplier<Person> supplierPerson = Person::new;
32     Supplier<Person> supplierPerson_1 = () -> new Person();
33
34     // 有参构造函数
35     BiFunction<String, String, Person> biFunction = Person::new;
36     BiFunction<String, String, Person> biFunction_1 = (name, gender) -> new Person(name, gender);
37
38     // 类名调用实例方法,入参为传入实例对象
39     Function<Person, Person> functionP = Person::toOpposite;
40     Function<Person, Person> functionP_1 = person -> person.toOpposite();
41
42     Consumer<String> consumer = System.out::println;
43     Consumer<String> consumer_1 = (String str) -> System.out.println(str);;
44
45     public static void main(String[] args) {
46         List<String> list = Arrays.asList("1", "2", "3");
47         boolean bl = list.stream().anyMatch("1"::equals);
48         List<String> retval = list.stream().collect(Collectors.toCollection(LinkedList::new));
49
50         List<Person> persons = Arrays.asList(new Person(10, "Jack", "M"));
51         Person person = new Person(20, "Lily", "F");
52         persons.stream().filter(Person::isMale).filter(person::isUnder).collect(Collectors.toCollection(ArrayList::new));
53     }
54 }

Person类代码如下:

 1 public class Person {
 2     int age;
 3     String name;
 4     String gender;
 5
 6     public Person() {
 7     }
 8
 9     public Person(String name) {
10         this.name = name;
11     }
12
13     public Person(String name, String gender) {
14         this.name = name;
15         this.gender = gender;
16     }
17
18     public Person(int age, String name, String gender) {
19         this.age = age;
20         this.name = name;
21         this.gender = gender;
22     }
23
24     public String getName() {
25         return this.name;
26     }
27
28     public Person toOpposite() {
29         if (gender.charAt(0) == ‘M‘)
30             gender = "F";
31         else
32             gender = "M";
33         return this;
34     }
35
36     public static boolean isTest() {
37         return true;
38     }
39
40     public boolean isUnder(Person person) {
41         return person.age > this.age;
42     }
43
44     public boolean isMale() {
45         return gender.equals("M");
46     }
47 }

原文地址:https://www.cnblogs.com/blouson/p/Java_colon_operator.html

时间: 2024-10-31 13:20:21

lambda表达式,java双冒号(::)示例详解的相关文章

Java线程join示例详解

Java线程的join方法可用于暂停当前线程的执行直至目标线程死亡.Thread中一共有三个join的重载方法. public final void join():该方法将当前线程放入等待队列中,直至被它调用的线程死亡为止.如果该线程被中断,则会抛出InterruptedException异常. public final synchronized void join(long millis):该方法用于让当前线程进入等待状态,直至被它调用的线程死亡或是经过millis毫秒.由于线程的执行依赖于操

【转】java list用法示例详解

转自:http://www.jb51.net/article/45660.htm java中可变数组的原理就是不断的创建新的数组,将原数组加到新的数组中,下文对java list用法做了详解. List:元素是有序的(怎么存的就怎么取出来,顺序不会乱),元素可以重复(角标1上有个3,角标2上也可以有个3)因为该集合体系有索引,ArrayList:底层的数据结构使用的是数组结构(数组长度是可变的百分之五十延长)(特点是查询很快,但增删较慢)线程不同步LinkedList:底层的数据结构是链表结构(

Java 8 Stream API详解

Java 8 Stream API详解 一.Stream API介绍 Java 8引入了全新的Stream API,此Stream与Java I/O包里的InputStream和OutputStream是完全不同的概念,它不同于StAX对XML解析的Stream,也不同于Amazon Kinesis对大数据实时处理的Stream.Stream API更像具有Iterable的集合类,但行为和集合类又有所不同,它是对集合对象功能的增强,专注于对集合对象进行各种非常便捷.高效的聚合操作或大批量数据操

Java虚拟机工作原理详解

原文地址:http://blog.csdn.net/bingduanlbd/article/details/8363734 一.类加载器 首先来看一下java程序的执行过程. 从这个框图很容易大体上了解java程序工作原理.首先,你写好java代码,保存到硬盘当中.然后你在命令行中输入 [java] view plaincopy javac YourClassName.java 此时,你的java代码就被编译成字节码(.class).如果你是在Eclipse IDE或者其他开发工具中,你保存代码

String.format()【示例详解】

整理者:Vashon 前言: String.format 作为文本处理工具,为我们提供强大而丰富的字符串格式化功能,为了不止步于简单调用 String.format("Hello %s", "Vashon"); ,下面将笔记整理并记录下来. 方法重载: // 使用当前本地区域对象(Locale.getDefault())格式化字符串 String String.format(String fmt, Object... args); // 自定义本地区域对象格式化字符

SpringBoot与PageHelper的整合示例详解

SpringBoot与PageHelper的整合示例详解 1.PageHelper简介 PageHelper官网地址: https://pagehelper.github.io/ 摘要: com.github.pagehelper.PageHelper是一款好用的开源免费的Mybatis第三方物理分页插件. PageHelper是一款好用的开源免费的Mybatis第三方物理分页插件,其实我并不想加上好用两个字,但是为了表扬插件作者开源免费的崇高精神,我毫不犹豫的加上了好用一词作为赞美. 原本以为

linux添加开机自启动脚本示例详解

来源: linux添加开机自启动脚本示例详解 linux下(以RedHat为范本)添加开机自启动脚本有两种方法,先来简单的; 一.在/etc/rc.local中添加如果不想将脚本粘来粘去,或创建链接什么的,则:step1. 先修改好脚本,使其所有模块都能在任意目录启动时正常执行;step2. 再在/etc/rc.local的末尾添加一行以绝对路径启动脚本的行;如:$ vim /etc/rc.local#!/bin/sh## This script will be executed *after*

Java的位运算符详解实例

Java的位运算符详解实例——与(&).非(~).或(|).异或(^).右移(>>).左移(<<).无符号右移(>>>) 位运算符主要针对二进制, 它包括了:“与”.“非”.“或”.“异或”."右移"."左移"."无符号右移". 从表面上看似乎有点像逻辑运算符, 但逻辑运算符是针对两个关系运算符来进行逻辑运算, 而位运算符主要针对两个二进制数的位进行逻辑运算. 下面详细介绍每个位运算符. 1.与运

java中static作用详解

static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static修饰的成员变量和成员方法独立于该类的任何对象.也就是说,它不依赖类特定的实例,被类的所有实例共享. 只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们.因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象. 用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类

Java Service Wrapper配置详解

1 #encoding=UTF-8 2 # Configuration files must begin with a line specifying the encoding 3 # of the the file. 4 5 #******************************************************************** 6 # Wrapper License Properties (Ignored by Community Edition) 7 #*