::方法使用

条件:lambada表达式的主体仅包含一个表达式,且lambada表达式只调用一个已经存在的方法;被引用的方法的参数列表与lambada表达式的输入输出一致

以下是Java 8中方法引用的一些语法:

  • 静态方法引用(static method)语法:classname::methodname 例如:Person::getAge
  • 对象的实例方法引用语法:instancename::methodname 例如:System.out::println
  • 对象的超类方法引用语法: super::methodname
  • 类构造器引用语法: classname::new 例如:ArrayList::new
  • 数组构造器引用语法: typename[]::new 例如: String[]:new
DataStreamSource<String> kafkaDS = env.addSource(MyKafkaUtil.getKafkaConsumer(sourceTopic, groupId));

kafkaDS.map(line->{return JSON.parseObject(line);});
//Lambda 简写
kafkaDS.map(JSON::parseObject);
@Test
void printTest1() {
List<String> list = Arrays.asList("a", "b", "c", "d"); System.out.println("for => ");
for (String item : list) {
AcceptMethod.printValue(item);
} System.out.println("forEach => ");
list.forEach(item -> AcceptMethod.printValue(item)); System.out.println("forEach => ::");
//list.forEach(new AcceptMethod()::printValue); //非静态方法
list.forEach(AcceptMethod::printValue); System.out.println("forEach list => ::");
List<LoginUser> loginUserList = new ArrayList<>();
LoginUser loginUser = new LoginUser();
loginUser.setOs("iOS");
loginUserList.add(loginUser);
loginUser = new LoginUser();
loginUser.setOs("Android");
loginUserList.add(loginUser);
loginUserList.forEach(AcceptMethod::printList); } public static class AcceptMethod {
public static void printValue(String str) {
System.out.println("print value : " + str);
} public static void printList(LoginUser map) {
System.out.println("print value : " + map.getOs());
}
}

Stream 示例

public class Java8Tester {
public static void main(String args[]){
System.out.println("使用 Java 7: "); // 计算空字符串
List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
System.out.println("列表: " +strings);
long count = getCountEmptyStringUsingJava7(strings); System.out.println("空字符数量为: " + count);
count = getCountLength3UsingJava7(strings); System.out.println("字符串长度为 3 的数量为: " + count); // 删除空字符串
List<String> filtered = deleteEmptyStringsUsingJava7(strings);
System.out.println("筛选后的列表: " + filtered); // 删除空字符串,并使用逗号把它们合并起来
String mergedString = getMergedStringUsingJava7(strings,", ");
System.out.println("合并字符串: " + mergedString);
List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5); // 获取列表元素平方数
List<Integer> squaresList = getSquares(numbers);
System.out.println("平方数列表: " + squaresList);
List<Integer> integers = Arrays.asList(1,2,13,4,15,6,17,8,19); System.out.println("列表: " +integers);
System.out.println("列表中最大的数 : " + getMax(integers));
System.out.println("列表中最小的数 : " + getMin(integers));
System.out.println("所有数之和 : " + getSum(integers));
System.out.println("平均数 : " + getAverage(integers));
System.out.println("随机数: "); // 输出10个随机数
Random random = new Random(); for(int i=0; i < 10; i++){
System.out.println(random.nextInt());
} System.out.println("使用 Java 8: ");
System.out.println("列表: " +strings); count = strings.stream().filter(string->string.isEmpty()).count();
System.out.println("空字符串数量为: " + count); count = strings.stream().filter(string -> string.length() == 3).count();
System.out.println("字符串长度为 3 的数量为: " + count); filtered = strings.stream().filter(string ->!string.isEmpty()).collect(Collectors.toList());
System.out.println("筛选后的列表: " + filtered); mergedString = strings.stream().filter(string ->!string.isEmpty()).collect(Collectors.joining(", "));
System.out.println("合并字符串: " + mergedString); squaresList = numbers.stream().map( i ->i*i).distinct().collect(Collectors.toList());
System.out.println("Squares List: " + squaresList);
System.out.println("列表: " +integers); IntSummaryStatistics stats = integers.stream().mapToInt((x) ->x).summaryStatistics(); System.out.println("列表中最大的数 : " + stats.getMax());
System.out.println("列表中最小的数 : " + stats.getMin());
System.out.println("所有数之和 : " + stats.getSum());
System.out.println("平均数 : " + stats.getAverage());
System.out.println("随机数: "); random.ints().limit(10).sorted().forEach(System.out::println); // 并行处理
count = strings.parallelStream().filter(string -> string.isEmpty()).count();
System.out.println("空字符串的数量为: " + count);
} private static int getCountEmptyStringUsingJava7(List<String> strings){
int count = 0; for(String string: strings){ if(string.isEmpty()){
count++;
}
}
return count;
} private static int getCountLength3UsingJava7(List<String> strings){
int count = 0; for(String string: strings){ if(string.length() == 3){
count++;
}
}
return count;
} private static List<String> deleteEmptyStringsUsingJava7(List<String> strings){
List<String> filteredList = new ArrayList<String>(); for(String string: strings){ if(!string.isEmpty()){
filteredList.add(string);
}
}
return filteredList;
} private static String getMergedStringUsingJava7(List<String> strings, String separator){
StringBuilder stringBuilder = new StringBuilder(); for(String string: strings){ if(!string.isEmpty()){
stringBuilder.append(string);
stringBuilder.append(separator);
}
}
String mergedString = stringBuilder.toString();
return mergedString.substring(0, mergedString.length()-2);
} private static List<Integer> getSquares(List<Integer> numbers){
List<Integer> squaresList = new ArrayList<Integer>(); for(Integer number: numbers){
Integer square = new Integer(number.intValue() * number.intValue()); if(!squaresList.contains(square)){
squaresList.add(square);
}
}
return squaresList;
} private static int getMax(List<Integer> numbers){
int max = numbers.get(0); for(int i=1;i < numbers.size();i++){ Integer number = numbers.get(i); if(number.intValue() > max){
max = number.intValue();
}
}
return max;
} private static int getMin(List<Integer> numbers){
int min = numbers.get(0); for(int i=1;i < numbers.size();i++){
Integer number = numbers.get(i); if(number.intValue() < min){
min = number.intValue();
}
}
return min;
} private static int getSum(List numbers){
int sum = (int)(numbers.get(0)); for(int i=1;i < numbers.size();i++){
sum += (int)numbers.get(i);
}
return sum;
} private static int getAverage(List<Integer> numbers){
return getSum(numbers) / numbers.size();
}
}

实例

/**
* java list 中的字符是否包括在另一个 list 中
*/
@Test
void anyMatchTest() {
List<String> permission = Arrays.asList("A", "B", "D");
List<String> arr = Arrays.asList("C", "D", "E", "F");
boolean b = arr.stream().anyMatch(permission::contains);
System.out.println("" + b);
} /**
* 数组转Set\List
*/
void anyMatchTest() {
String[] permsArr = "a,b,c".split(",");
Set<String> permsSet = Arrays.stream(permsArr).collect(Collectors.toSet());
}

Java Lambda Stream的更多相关文章

  1. Java 8 Stream API详解--转

    原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java8引入了 ...

  2. Java Lambda表达式初探

    Java Lambda表达式初探 前言 本文受启发于Trisha Gee在JavaOne 2016的主题演讲Refactoring to Java 8. Java 8已经发行两年多,但很多人仍然在使用 ...

  3. Java 8 Stream API Example Tutorial

    Stream API Overview Before we look into Java 8 Stream API Examples, let’s see why it was required. S ...

  4. Java Lambda表达式入门[转]

    原文链接: Start Using Java Lambda Expressions http://blog.csdn.net/renfufei/article/details/24600507 下载示 ...

  5. Java 8 Stream

    1.关于Java8部分新特性介绍 Java8的新特性很多,在此就不一一介绍了,这里只说一下我自己在工作用用得比较多的几点: 1.1.Lambda表达式 Lambda允许把函数作为一个方法的参数(函数作 ...

  6. [零]java8 函数式编程入门官方文档中文版 java.util.stream 中文版 流处理的相关概念

    前言 本文为java.util.stream 包文档的译文 极其个别部分可能为了更好理解,陈述略有改动,与原文几乎一致 原文可参考在线API文档 https://docs.oracle.com/jav ...

  7. 关于java中Stream理解

    关于java中Stream理解 Stream是什么 Stream:Java 8新增的接口,Stream可以认为是一个高级版本的Iterator.它代表着数据流,流中的数据元素的数量可以是有限的, 也可 ...

  8. Java 8 Stream API

    Java 8 Stream API JDK8 中有两大最为重要的改变.第一个是 Lambda 式:另外 Stream API(java.util.stream.*) Stream 是 JDK8 中处理 ...

  9. Java之Stream流

    Stream流的初步学习 初次学习Stream流的学习笔记,学习之前先了解一下函数式接口 概述 API是一个程序向使用者提供的一些方法,通过这些方法就能实现某些功能.所以对于流API来 说,重点是怎么 ...

  10. Java 8 Stream 用法

    一.Stream是什么 Stream 不是集合元素,它不是数据结构并不保存数据,它是有关算法和计算的,它更像一个高级版本的 Iterator.原始版本的 Iterator,用户只能显式地一个一个遍历元 ...

随机推荐

  1. 03 docker容器镜像基础

    本章内容 1.docker镜像基础 2.docker环境下使用的文件系统 3.registry(仓库) 4.获取镜像 5.制作(生成)并上传镜像 --------------------------- ...

  2. Redis学习(黑马篇)

    1.redis是一个键值型数据库即在Redis内存的数据都是键值对的格式,如: 2.NOSQL非关系型数据库与MySQL关系型数据库对比: 非结构化类型分为:键值类型(Redis)(value支持多种 ...

  3. Python读写Excel文件第三方库汇总,你想要的都在这儿!

    常见库简介 xlrd xlrd是一个从Excel文件读取数据和格式化信息的库,支持.xls以及.xlsx文件.http://xlrd.readthedocs.io/en/latest/1.xlrd支持 ...

  4. WSL终端无法启动

    WSL终端无法启动 1.状态 (1)宿主系统重新启动后,通过菜单项无法启动终端. (2)在powershell中,通过命令:wsl -l -v,查看子系统均为为stopped状态. (3)Powers ...

  5. Spring boot 入门-从idea 创建一个Spring boot应用!

    1.File->New Project. http://start.springboot.io 2.下一步. 3.选择依赖. 4.生成项目. 5.运行. 6.设置Tomcat端口 src\mai ...

  6. java的数据和表达式

    一.基本语法元素 1.空白和注释及语句 (1)空白: 换行符.回车符.空格键.水平定位键(Tab) 编译器会忽略掉多余的空白 作用:增加程序的易读性 (2)注释:主要作用是将代码解释其功能和作用,在编 ...

  7. File 未释放文件权柄问题处理

    Unreleased Resource: Files Abstract 程序可能无法释放某个文件句柄. Explanation 程序可能无法成功释放某一个文件句柄. 资源泄露至少有两种常见的原因: - ...

  8. linq小结

    普通查询 var query = from s in context.Student select s; //投影列 var query = from s in context.Student sel ...

  9. Java面试——数据库

    一.数据库隔离级别 [1]Read Uncommitted(读取未提交内容):出现脏读,也就是可能读取到其他会话中未提交事务修改的数据.[2]Read Committed(读取已提交内容):不可重复读 ...

  10. 网络----OSI七层

    OSI 订制的是一个用于计算机或通信系统间互联的标准体质(一般称为OSI参考模型或七层模型) OSI 模型把网络通信的工作分为7层分别是: 常用内容:物理层 数据链层 网络层 注解 OSI 7层 1. ...