分享自: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表达式及新特新的更多相关文章

  1. java8 Lambda表达式的新手上车指南(1)

    背景 java9的一再推迟发布,似乎让我们恍然想起离发布java8已经过去了三年之久,java8应该算的上java语言在历代版本中变化最大的一个版本了,最大的新特性应该算得上是增加了lambda表达式 ...

  2. java8 Lambda表达式的新手上车指南(1)--基础语法和函数式接口

    背景 java9的一再推迟发布,似乎让我们恍然想起离发布java8已经过去了三年之久,java8应该算的上java语言在历代版本中变化最大的一个版本了,最大的新特性应该算得上是增加了lambda表达式 ...

  3. Java8 Lambda表达式详解手册及实例

    先贩卖一下焦虑,Java8发于2014年3月18日,距离现在已经快6年了,如果你对Java8的新特性还没有应用,甚至还一无所知,那你真得关注公众号"程序新视界",好好系列的学习一下 ...

  4. Java8 Lambda表达式(一)

    目录 一.应用场景引入 优化一:使用策略模式 优化二:使用匿名内部类 优化三:使用Lambda表达式 优化四:使用Stream API 二.Lambda运算符和对应语法 语法格式 Lambda表达式需 ...

  5. Java8 Lambda表达式、函数式接口和方法引用

    目录 Java8 Lambda表达式和函数式接口 Lambda表达式 Lambda的使用 函数式接口FunctionalInterface Java内置四大核心函数式接口 方法引用 构造器引用 Jav ...

  6. 【Java学习笔记之三十一】详解Java8 lambda表达式

    Java 8 发布日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里.在Java 8之前 ...

  7. java8 快速入门 lambda表达式 Java8 lambda表达式10个示例

    本文由 ImportNew - lemeilleur 翻译自 javarevisited.欢迎加入翻译小组.转载请见文末要求. Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发 ...

  8. Java8 lambda表达式10个示例

    Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里.在Ja ...

  9. Java8 lambda表达式语法 1

    本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘.因为本人也是刚刚开始学习Java8,所以文中肯定有错误和理解偏差的地方,希望大家帮忙指出,我会持续修改和优化.本文是该系列的第一篇, ...

  10. java8 Lambda表达式的10个例子(转)

    原文:http://jobar.iteye.com/blog/2023477 Java8中Lambda表达式的10个例子 例1 用Lambda表达式实现Runnable接口 Java代码 收藏代码// ...

随机推荐

  1. MTK USB 子系统

    一.USB 子系统初始化 1. kernel/drivers/usb/core/usb.c subsys_initcall(usb_init); static int __init usb_init( ...

  2. android性能测试工具

    Android性能测试工具Emmagee介绍   Emmagee介绍 Emmagee是监控指定被测应用在使用过程中占用机器的CPU.内存.流量资源的性能测试小工具.该工具的优势在于如同windows系 ...

  3. hibernate学习三 精解Hibernate之核心文件

    一 hibernate.cfg.xml详解 1 JDBC连接: 2 配置C3P0连接池: 3 配置JNDI数据源: 4 可选的配置属性: 5 hibernate二级缓存属性 6 hibernate事务 ...

  4. js 拦截 窗体关闭事件

    <script type="text/javascript">   <!--         window.onbeforeunload = onbeforeun ...

  5. 【Hadoop】MapReduce笔记(四):MapReduce优化策略总结

    Cloudera 提供给客户的服务内容之一就是调整和优化MapReduce job执行性能.MapReduce和HDFS组成一个复杂的分布式系统,并且它们运行着各式各样用户的代码,这样导致没有一个快速 ...

  6. 微信小程序开发之页面跳转并携带参数

    接口: wx.navigateTo({url:......})   保留当前页面,跳转到应用内指定URL页面,导航栏左上角有返回按钮 wx.redirecTo({url:.....})       关 ...

  7. 面试lua笔试题各种坑

    替换字符串"abcdefgh" 中的"abc"为"ddc" local str ="abcdefgh"; b = str ...

  8. yzm10铺瓷砖 yzm10原创系列

    yzm10铺瓷砖 一天yzm10接到任务,要求用2×1大小的瓷砖,来铺2×4的地面,地面需要恰好被铺满.这对yzm10来说太容易了,于是他马上设计出了5种不同的铺法(旋转情况算不同种,如图示2.4). ...

  9. HTML5标签不兼容ie怎么办?

    HTML5的语义化标签以及属性,可以让开发者非常方便地实现清晰的web页面布局,加上CSS3的效果渲染,快速建立丰富灵活的web页面显得非常简单. 比较常用的HTML5的新标签元素有: <hea ...

  10. Memcached 查看帮助

    进入到memcached目录, 输入命令: memcached -h 即可查看帮助 -p<num>要侦听的TCP端口号(默认值:11211) -u<num>udp监听端口号(默 ...