[转]Java8 lambda表达式及新特新
分享自:Vincent
package info.liuwenjun.test; import org.junit.Test; import java.util.*;
import java.util.function.*;
import java.util.stream.Collectors; /**
* Created by Vincent on 2016-04-12.
*/
public class TestJava8 { private void print(Object obj) {
System.out.println(obj);
} @Test
public void sort() {
List<String> names = Arrays.asList("peter", "anna", "mike", "xenia"); Collections.sort(names, new Comparator<String>() {
@Override
public int compare(String a, String b) {
return a.compareTo(b);
}
}); Collections.sort(names, (String a, String b) -> {
return a.compareTo(b);
}); Collections.sort(names, (String a, String b) -> a.compareTo(b)); Collections.sort(names, (a, b) -> a.compareTo(b)); print(names); new Thread(new Runnable() {
@Override
public void run() {
System.out.println("inner class");
}
}).start(); new Thread(() -> System.out.println("lambda")).start();
} @Test
public void typeDeduction() {
Function<Integer, String> intToStr = a -> a.toString(); Function<Double, String> doubleToStr = a -> a.toString(); // doubleToStr = intToStr; // () -> print("typeDeduction");
((Action) () -> print("typeDeduction")).action();
} @FunctionalInterface
private interface Action {
void action();
} @Test
public void functionalInterface() {
Function<Integer, Integer> plusOne = i -> i + 1;
print(plusOne.apply(1)); Predicate<Character> emoticon = o->'皿'<-o;
print(emoticon.test('皿')); Consumer<Integer> printInt = i -> print(i);
printInt.accept(1); Supplier<Long> getCurrentTime = () -> System.currentTimeMillis();
print(getCurrentTime.get()); Action sayHello = () -> print("hello");
sayHello.action();
} @Test
public void testThis() {
Action innerClass = new Action() {
@Override
public void action() {
this.print("testThis");
} private void print(Object obj) {
System.out.println("Inner: " + obj);
}
};
innerClass.action(); Action lambda = () -> this.print("testThis");
lambda.action();
} @Test
public void testFinal() {
final int finalVar = 0;
int effectivelyFinalVar = 0;
// effectivelyFinalVar = 1; new Action() {
@Override
public void action() {
print(finalVar);
print(effectivelyFinalVar);
}
}.action();
} private List<String> stringCollection = new ArrayList<String>() {
{
add("ddd2");
add("aaa2");
add("bbb1");
add("aaa1");
add("bbb3");
add("ccc");
add("bbb2");
add("ddd1");
}
}; @Test
public void filter() {
stringCollection
.stream()
.filter(s -> s.startsWith("a"))
.forEach(s -> print(s));
} @Test
public void sorted() {
stringCollection
.stream()
.sorted((a, b) -> b.compareTo(a))
.filter(s -> s.startsWith("a"))
.forEach(s -> print(s));
} @Test
public void map() {
stringCollection
.stream()
.map(s -> s.toUpperCase())
.sorted(Comparator.comparing(s -> s.length()))
.forEach(s -> print(s));
} @Test
public void flatMap() {
stringCollection
.stream()
.filter(s -> s.startsWith("a"))
.flatMap(s -> Arrays.stream(s.split("")))
.forEach(c -> print(c));
} @Test
public void match() {
print(stringCollection.stream().anyMatch(s -> s.startsWith("a"))); print(stringCollection.stream().allMatch(s -> s.startsWith("a"))); print(stringCollection.stream().noneMatch(s -> s.startsWith("z")));
} @Test
public void count() {
print(stringCollection.stream().filter(s -> s.startsWith("b")).count());
} @Test
public void reduce() {
Optional<Integer> optional = stringCollection
.stream()
.map(s -> s.length())
.reduce((a, b) -> a + b);
print(optional.get()); int sum = stringCollection.get(0).length();
for (int i = 1; i < stringCollection.size(); i++) {
sum = sum + stringCollection.get(i).length();
}
print(sum);
} @Test
public void intStream() {
IntSummaryStatistics statistics = stringCollection
.stream()
.mapToInt(s -> s.length())
.summaryStatistics();
print(statistics.getAverage());
print(statistics.getSum());
print(statistics.getMax());
print(statistics.getMin());
print(statistics.getCount());
} @Test
public void complex() {
stringCollection
.stream()
.sorted()
.filter(s -> s.startsWith("a") && s.endsWith("1"))
.map(s -> s.length())
.filter(i -> i == 4)
.forEach(i -> print(i));
} @Test
public void toList() {
List<Integer> len = stringCollection.stream().map(s -> s.length()).collect(Collectors.toList());
print(len);
} @Test
public void toMap() {
Map<String, Integer> len = stringCollection.stream().collect(Collectors.toMap(s -> s, s -> s.length()));
print(len);
} @Test
public void groupingBy() {
Map<Integer, List<String>> groups = stringCollection
.stream()
.collect(Collectors.groupingBy(s -> s.length()));
print(groups);
} @Test
public void complexCollect() {
Map<Integer, List<String>> groups = stringCollection
.stream()
.collect(Collectors.groupingBy(s -> s.length(),
Collectors.mapping(s -> s.toUpperCase(), Collectors.toList())));
print(groups);
} @Test
public void removeIf() {
List<String> copy = new ArrayList<>(stringCollection); stringCollection.removeIf(s -> s.startsWith("a"));
print(stringCollection); Iterator<String> iter = copy.iterator();
while (iter.hasNext()) {
if(iter.next().startsWith("a")) {
iter.remove();
}
}
print(copy);
} @Test
public void iterateMap() {
Map<String, Integer> map = stringCollection.stream().collect(Collectors.toMap(s -> s, s -> s.length())); map.forEach((key, value) -> print(key + ": " + value)); print("---------"); for(Map.Entry entry : map.entrySet()) {
print(entry.getKey() + ": " + entry.getValue());
}
} @Test
public void mapStream() {
Map<String, Integer> map = stringCollection.stream().collect(Collectors.toMap(s -> s, s -> s.length())); map.entrySet()
.stream()
.filter(e -> e.getValue() == 4)
.forEach(e -> print(e.getKey() + ": " + e.getValue()));
}
}
[转]Java8 lambda表达式及新特新的更多相关文章
- java8 Lambda表达式的新手上车指南(1)
背景 java9的一再推迟发布,似乎让我们恍然想起离发布java8已经过去了三年之久,java8应该算的上java语言在历代版本中变化最大的一个版本了,最大的新特性应该算得上是增加了lambda表达式 ...
- java8 Lambda表达式的新手上车指南(1)--基础语法和函数式接口
背景 java9的一再推迟发布,似乎让我们恍然想起离发布java8已经过去了三年之久,java8应该算的上java语言在历代版本中变化最大的一个版本了,最大的新特性应该算得上是增加了lambda表达式 ...
- Java8 Lambda表达式详解手册及实例
先贩卖一下焦虑,Java8发于2014年3月18日,距离现在已经快6年了,如果你对Java8的新特性还没有应用,甚至还一无所知,那你真得关注公众号"程序新视界",好好系列的学习一下 ...
- Java8 Lambda表达式(一)
目录 一.应用场景引入 优化一:使用策略模式 优化二:使用匿名内部类 优化三:使用Lambda表达式 优化四:使用Stream API 二.Lambda运算符和对应语法 语法格式 Lambda表达式需 ...
- Java8 Lambda表达式、函数式接口和方法引用
目录 Java8 Lambda表达式和函数式接口 Lambda表达式 Lambda的使用 函数式接口FunctionalInterface Java内置四大核心函数式接口 方法引用 构造器引用 Jav ...
- 【Java学习笔记之三十一】详解Java8 lambda表达式
Java 8 发布日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里.在Java 8之前 ...
- java8 快速入门 lambda表达式 Java8 lambda表达式10个示例
本文由 ImportNew - lemeilleur 翻译自 javarevisited.欢迎加入翻译小组.转载请见文末要求. Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发 ...
- Java8 lambda表达式10个示例
Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里.在Ja ...
- Java8 lambda表达式语法 1
本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘.因为本人也是刚刚开始学习Java8,所以文中肯定有错误和理解偏差的地方,希望大家帮忙指出,我会持续修改和优化.本文是该系列的第一篇, ...
- java8 Lambda表达式的10个例子(转)
原文:http://jobar.iteye.com/blog/2023477 Java8中Lambda表达式的10个例子 例1 用Lambda表达式实现Runnable接口 Java代码 收藏代码// ...
随机推荐
- MakeFile 文件的使用
什么是Makefile? 一个工程中的源文件不计其数,其按类型.功能.模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译, ...
- Java并发之synchronized
Java多线程同步关键词是常用的多线程同步手段.它可以修饰静态类方法,实例方法,或代码块.修饰static静态方法时是对整个类加锁. 一.实现原理 在JVM中对象内存分三块区域,对象头.实例数据.对齐 ...
- poj1275收银员——差分约束
题目:http://poj.org/problem?id=1275 做的第一道差分约束题... 首先,根据题意得出一些不等关系(f为前缀和雇佣人数): 0 <= f[i] - f[i-1] &l ...
- mtk6737t摄像头配置文件的编译
修改摄像头的配置文件后,一直没有编译生效,要make一遍才生效,最终查出编译配置的方法摄像头配置文件路径 vendor/mediatek/proprietary/custom/mt6735/hal/D ...
- compileSdkVersion, minSdkVersion 和 targetSdkVersion详解
API level API level是一个整数,它指的是我们使用的框架(Framework)的版本,也就是我们使用的sdk中的各个平台下的android.jar. 但是这个API level又和An ...
- pcieport 0000:00:1c.5: PCIe Bus Error
进入Linux系统 root身份 编辑/etc/default/grub GRUB_CMDLINE_LINUX_DEFAULT="quiet" 将quiet改为 pci=nomsi ...
- 修改Linux内核参数提高Nginx服务器在高的时候的性能
并发 Linux下高并发的Nginx服务器,当TCP TIME_WAIT套接字数量经常达到两.三万,服务器很容易被拖死.通过修改Linux内核参数,可以减少Nginx服务器的TIME_WAIT套接字数 ...
- python -m json.tool 中文乱码 Format JSON with python
现在以 json 为数据传输格式的 RESTful 接口非常流行.为调试这样的接口,一个常用的办法是使用 curl 命令: curl http://somehost.com/some-restful- ...
- 基于微信的SDK的学习与使用——实现产品支付
声明本篇博客为作者原创,本篇是继支付宝支付之后本人又学习的第二种支付实现,本篇着重于原理与注意事项的学习. 参考 参考 微信支付的开发文档相比支付宝的比较简单,但是使用功能丝毫也不含糊,我觉得简单易 ...
- themeforest 免费模板
http://www.im286.com/thread-9550365-1-1.html 官网:http://themeforest.net/item/elena-responsive-email-t ...