Java8新特性(部分)
2017-12-01 17:56
357 查看
-----****************************************-----
-----*****-----Lambda 匿名函数/闭包-----*****-----
-----****************************************-----
=====Java8新特性(Lambda) -- 示例1(Runnable)=====
System.out.println("\n==========Java8新特性(Lambda) -- 示例1(Runnable)==========");
// Runnable之前:
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Java8之前写法--四行代码");
}
}).start();
// Java8新特性:
new Thread(() -> System.out.println("Java8-Lambda新特性--一行代码")).start();
=====Java8新特性(Lambda) -- 示例2(事件监听)=====
System.out.println("\n==========Java8新特性(Lambda) -- 示例2(事件监听)==========");
JButton show = new JButton("Show");
// Java8之前:
show.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("事件监听java8之前 = [" + e + "]");
}
});
// Java8新特性
show.addActionListener((e) -> System.out.println("事件监听java8新特性 = [" + e + "]"));
=====Java8新特性(Lambda) -- 示例3(Collections.sort(list,new Comparator<Object>()))=====
System.out.println("\n==========Java8新特性(Lambda) -- 示例3(Collections.sort(list,new Comparator<Object>()))==========");
ArrayList<TestEntity> list = new ArrayList<>();
TestEntity en1 = new TestEntity();
en1.setId("1001");
en1.setName("name1");
TestEntity en2 = new TestEntity();
en2.setId("1002");
en2.setName("name2");
TestEntity en3 = new TestEntity();
en3.setId("1003");
en3.setName("name3");
list.add(en2);list.add(en3);list.add(en1);
// Java8之前:
Collections.sort(list, new Comparator<TestEntity>() {
@Override
public int compare(TestEntity o1, TestEntity o2) {
return o1.getId().compareTo(o2.getId());
}
});
// Java8新特性:
Collections.sort(list,(o1,o2) -> Integer.valueOf(o1.getId()).compareTo(Integer.valueOf(o2.getId())));
for(TestEntity x : list){
System.out.println("x = [" + x.getId() + "]");
}
=====Java8新特性(Lambda) -- 示例4(对列表进行迭代)=====
System.out.println("\n==========Java8新特性(Lambda) -- 示例4(对列表进行迭代)==========");
List<String> arrs = Arrays.asList("list1", "list2", "list3", "list4", "list5");
// Java8之前:
for(String a : arrs){
System.out.println("Java8之前 = [" + a + "]");
}
// Java8新特性:
arrs.forEach(n -> System.out.println("Java8新特性 = [" + n + "]"));
arrs.forEach(System.out::println); // 方法引用由::双冒号操作符标示。
=====Java8新特性(Lambda) -- 示例5(函数式接口Predicate)=====
System.out.println("\n==========Java8新特性(Lambda) -- 示例5(函数式接口Predicate)==========");
List<String> arr = Arrays.asList("Java", "PHP", "Python", "Echars");
filter(arr,(str) -> str.equals("Java"));
// Predicate提供类似于逻辑操作符AND和OR的方法,名字叫做and()、or()和xor(),用于将传入 filter() 方法的条件合并起来
Predicate<String> startsWithJ = (n) -> n.startsWith("J");
Predicate<String> fourLetterLong = (n) -> n.length() == 4;
arr.stream()
.filter(startsWithJ.and(fourLetterLong))
.forEach((n) -> System.out.print("nName, which starts with 'J' and four letter long is : " + n));
// 过滤
public static void filter(List<String> names, Predicate predicate) {
names.forEach((name) -> {
if (predicate.test(name)) {
System.out.println("过滤后 = [" + name + "]");
}
});
}
=====Java零时插入一个函数Stream=====
System.out.println("\n==========Java零时插入一个函数Stream==========");
arr.stream().filter(f -> f.length() > 3).forEach(r -> System.out.println("r = [" + r + "]"));
=====Java8新特性(Lambda) -- 示例6(Lambda表达式的Map和Reduce)=====
System.out.println("\n==========Java8新特性(Lambda) -- 示例6(Lambda表达式的Map和Reduce)==========");
List<Integer> arr2 = Arrays.asList(100, 200, 300, 400, 500, 600);
// Java8之前:
for(Integer x : arr2){
double price = x +.12 * x;
System.out.println("Java8之前: = [" + price + "]");
}
// Java8新特性:
arr2.stream().map((price) -> price + .12 * price).forEach(x -> System.out.println("Java8新特性 = [" + x + "]"));
// reduce() 方法计算总和
Double aDouble = arr2.stream().map((price) -> price + .12 * price).reduce((sum, price) -> sum + price).get();
System.out.println("aDouble = [" + aDouble + "]");
=====Java8新特性(Lambda) -- 示例7(对列表的每个元素应用函数)=====
System.out.println("\n==========Java8新特性(Lambda) -- 示例7(对列表的每个元素应用函数)==========");
List<String> arr3 = Arrays.asList("JAVA", "PHP", "Python", "Echarts", "Hadoop");
String collect = arr3.stream().map((x) -> x.toLowerCase()).collect(Collectors.joining("','","'","'"));
System.out.println("collect = [" + collect + "]");
=====Java8新特性(Lambda) -- 示例8(利用流的distinct() 方法来对集合进行去重)=====
System.out.println("\n==========Java8新特性(Lambda) -- 示例8(利用流的distinct() 方法来对集合进行去重)==========");
List<Integer> arr4 = Arrays.asList(2, 3, 5, 6, 5, 6, 4, 5, 8, 5, 6, 9, 5, 9);
List<Integer> collect1 = arr4.stream().map(n -> n).distinct().collect(Collectors.toList());
collect1.forEach(x -> System.out.println("distinct去重 = [" + x + "]"));
/*******************************************
*****-----Java8新特性(方法引用)-----*****
*******************************************/
Person person1 = new Person("小一","2017-10-22");
Person person2 = new Person("小二","2016-10-22");
Person person3 = new Person("小三","2015-10-22");
Person person4
4000
= new Person("小四","2014-10-22");
Person person5 = new Person("小四","2014-10-22");
List<Person> persons = Arrays.asList(person1, person2, person3, person4,person5);
// 普通写法
Collections.sort(persons, new PersonComparator());
persons.forEach(person -> System.out.println(person.getBirthday()));
// java8新特性(方法引用)
persons.sort(Person::comparator);
persons.forEach(person -> System.out.println("Java8新特性 = [" + person.getBirthday() + "]"));
Set<Person> people = new TreeSet<>((o1,o2) -> o1.getName().compareTo(o2.getName()));
people.addAll(persons);
ArrayList<Person> arr5 = new ArrayList<>(people);
arr5.forEach(array -> System.out.println("TreeSet去重 = [" + array.getBirthday() + "]"));
/*******************************************
*****-----Java8新特性(Stream)-----*****
*******************************************/
System.out.println("\n==========Java8新特性(Stream) --(summaryStatistics)==========");
List<Integer> arr6 = Arrays.asList(5, 9, 6, 4, 8, 7, 2, 1);
IntSummaryStatistics isstics = arr6.stream().mapToInt(n -> n).summaryStatistics();
System.out.println("个数 = [" + isstics.getCount() + "]");
System.out.println("最大 = [" + isstics.getMax() + "]");
System.out.println("最小 = [" + isstics.getMin() + "]");
System.out.println("总数 = [" + isstics.getSum() + "]");
System.out.println("平均数 = [" + isstics.getAverage() + "]");
/***********************************************
*****-----Java8新特性(日期时间 API)-----*****
***********************************************/
LocalDateTime dateNow = LocalDateTime.now();
int year = dateNow.getYear();
Month month = dateNow.getMonth();
DayOfWeek week = dateNow.getDayOfWeek();
int minute = dateNow.getMinute();
int hour = dateNow.getHour();
System.out.println("dateNow = [" + dateNow + "]");
System.out.println("year = [" + year + "]");
System.out.println("month = [" + month + "]");
System.out.println("week = [" + week + "]");
System.out.println("minute = [" + minute + "]");
System.out.println("hour = [" + hour + "]");
// 解析字符串为时间
LocalDateTime parse = LocalDateTime.parse("2017-12-01T16:50:02.415");
System.out.println("parse = [" + parse + "]");
// 获取时区
Set<String> zoneId = ZoneId.getAvailableZoneIds();
zoneId.forEach(zone -> System.out.println("时区 = [" + zone + "]"));
/***********************************************
*****-----Java8新特性(Base64)-----*****
***********************************************/
String name = "zhangmingliang";
try {
// 基本编码
String encoder = Base64.getEncoder().encodeToString(name.getBytes("utf-8"));
System.out.println("encoder = [" + encoder + "]");
// 解码
byte[] decoder = Base64.getDecoder().decode(encoder);
System.out.println("decoder = [" + new String(decoder) + "]");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
-----*****-----Lambda 匿名函数/闭包-----*****-----
-----****************************************-----
=====Java8新特性(Lambda) -- 示例1(Runnable)=====
System.out.println("\n==========Java8新特性(Lambda) -- 示例1(Runnable)==========");
// Runnable之前:
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Java8之前写法--四行代码");
}
}).start();
// Java8新特性:
new Thread(() -> System.out.println("Java8-Lambda新特性--一行代码")).start();
=====Java8新特性(Lambda) -- 示例2(事件监听)=====
System.out.println("\n==========Java8新特性(Lambda) -- 示例2(事件监听)==========");
JButton show = new JButton("Show");
// Java8之前:
show.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("事件监听java8之前 = [" + e + "]");
}
});
// Java8新特性
show.addActionListener((e) -> System.out.println("事件监听java8新特性 = [" + e + "]"));
=====Java8新特性(Lambda) -- 示例3(Collections.sort(list,new Comparator<Object>()))=====
System.out.println("\n==========Java8新特性(Lambda) -- 示例3(Collections.sort(list,new Comparator<Object>()))==========");
ArrayList<TestEntity> list = new ArrayList<>();
TestEntity en1 = new TestEntity();
en1.setId("1001");
en1.setName("name1");
TestEntity en2 = new TestEntity();
en2.setId("1002");
en2.setName("name2");
TestEntity en3 = new TestEntity();
en3.setId("1003");
en3.setName("name3");
list.add(en2);list.add(en3);list.add(en1);
// Java8之前:
Collections.sort(list, new Comparator<TestEntity>() {
@Override
public int compare(TestEntity o1, TestEntity o2) {
return o1.getId().compareTo(o2.getId());
}
});
// Java8新特性:
Collections.sort(list,(o1,o2) -> Integer.valueOf(o1.getId()).compareTo(Integer.valueOf(o2.getId())));
for(TestEntity x : list){
System.out.println("x = [" + x.getId() + "]");
}
=====Java8新特性(Lambda) -- 示例4(对列表进行迭代)=====
System.out.println("\n==========Java8新特性(Lambda) -- 示例4(对列表进行迭代)==========");
List<String> arrs = Arrays.asList("list1", "list2", "list3", "list4", "list5");
// Java8之前:
for(String a : arrs){
System.out.println("Java8之前 = [" + a + "]");
}
// Java8新特性:
arrs.forEach(n -> System.out.println("Java8新特性 = [" + n + "]"));
arrs.forEach(System.out::println); // 方法引用由::双冒号操作符标示。
=====Java8新特性(Lambda) -- 示例5(函数式接口Predicate)=====
System.out.println("\n==========Java8新特性(Lambda) -- 示例5(函数式接口Predicate)==========");
List<String> arr = Arrays.asList("Java", "PHP", "Python", "Echars");
filter(arr,(str) -> str.equals("Java"));
// Predicate提供类似于逻辑操作符AND和OR的方法,名字叫做and()、or()和xor(),用于将传入 filter() 方法的条件合并起来
Predicate<String> startsWithJ = (n) -> n.startsWith("J");
Predicate<String> fourLetterLong = (n) -> n.length() == 4;
arr.stream()
.filter(startsWithJ.and(fourLetterLong))
.forEach((n) -> System.out.print("nName, which starts with 'J' and four letter long is : " + n));
// 过滤
public static void filter(List<String> names, Predicate predicate) {
names.forEach((name) -> {
if (predicate.test(name)) {
System.out.println("过滤后 = [" + name + "]");
}
});
}
=====Java零时插入一个函数Stream=====
System.out.println("\n==========Java零时插入一个函数Stream==========");
arr.stream().filter(f -> f.length() > 3).forEach(r -> System.out.println("r = [" + r + "]"));
=====Java8新特性(Lambda) -- 示例6(Lambda表达式的Map和Reduce)=====
System.out.println("\n==========Java8新特性(Lambda) -- 示例6(Lambda表达式的Map和Reduce)==========");
List<Integer> arr2 = Arrays.asList(100, 200, 300, 400, 500, 600);
// Java8之前:
for(Integer x : arr2){
double price = x +.12 * x;
System.out.println("Java8之前: = [" + price + "]");
}
// Java8新特性:
arr2.stream().map((price) -> price + .12 * price).forEach(x -> System.out.println("Java8新特性 = [" + x + "]"));
// reduce() 方法计算总和
Double aDouble = arr2.stream().map((price) -> price + .12 * price).reduce((sum, price) -> sum + price).get();
System.out.println("aDouble = [" + aDouble + "]");
=====Java8新特性(Lambda) -- 示例7(对列表的每个元素应用函数)=====
System.out.println("\n==========Java8新特性(Lambda) -- 示例7(对列表的每个元素应用函数)==========");
List<String> arr3 = Arrays.asList("JAVA", "PHP", "Python", "Echarts", "Hadoop");
String collect = arr3.stream().map((x) -> x.toLowerCase()).collect(Collectors.joining("','","'","'"));
System.out.println("collect = [" + collect + "]");
=====Java8新特性(Lambda) -- 示例8(利用流的distinct() 方法来对集合进行去重)=====
System.out.println("\n==========Java8新特性(Lambda) -- 示例8(利用流的distinct() 方法来对集合进行去重)==========");
List<Integer> arr4 = Arrays.asList(2, 3, 5, 6, 5, 6, 4, 5, 8, 5, 6, 9, 5, 9);
List<Integer> collect1 = arr4.stream().map(n -> n).distinct().collect(Collectors.toList());
collect1.forEach(x -> System.out.println("distinct去重 = [" + x + "]"));
/*******************************************
*****-----Java8新特性(方法引用)-----*****
*******************************************/
Person person1 = new Person("小一","2017-10-22");
Person person2 = new Person("小二","2016-10-22");
Person person3 = new Person("小三","2015-10-22");
Person person4
4000
= new Person("小四","2014-10-22");
Person person5 = new Person("小四","2014-10-22");
List<Person> persons = Arrays.asList(person1, person2, person3, person4,person5);
// 普通写法
Collections.sort(persons, new PersonComparator());
persons.forEach(person -> System.out.println(person.getBirthday()));
// java8新特性(方法引用)
persons.sort(Person::comparator);
persons.forEach(person -> System.out.println("Java8新特性 = [" + person.getBirthday() + "]"));
Set<Person> people = new TreeSet<>((o1,o2) -> o1.getName().compareTo(o2.getName()));
people.addAll(persons);
ArrayList<Person> arr5 = new ArrayList<>(people);
arr5.forEach(array -> System.out.println("TreeSet去重 = [" + array.getBirthday() + "]"));
/*******************************************
*****-----Java8新特性(Stream)-----*****
*******************************************/
System.out.println("\n==========Java8新特性(Stream) --(summaryStatistics)==========");
List<Integer> arr6 = Arrays.asList(5, 9, 6, 4, 8, 7, 2, 1);
IntSummaryStatistics isstics = arr6.stream().mapToInt(n -> n).summaryStatistics();
System.out.println("个数 = [" + isstics.getCount() + "]");
System.out.println("最大 = [" + isstics.getMax() + "]");
System.out.println("最小 = [" + isstics.getMin() + "]");
System.out.println("总数 = [" + isstics.getSum() + "]");
System.out.println("平均数 = [" + isstics.getAverage() + "]");
/***********************************************
*****-----Java8新特性(日期时间 API)-----*****
***********************************************/
LocalDateTime dateNow = LocalDateTime.now();
int year = dateNow.getYear();
Month month = dateNow.getMonth();
DayOfWeek week = dateNow.getDayOfWeek();
int minute = dateNow.getMinute();
int hour = dateNow.getHour();
System.out.println("dateNow = [" + dateNow + "]");
System.out.println("year = [" + year + "]");
System.out.println("month = [" + month + "]");
System.out.println("week = [" + week + "]");
System.out.println("minute = [" + minute + "]");
System.out.println("hour = [" + hour + "]");
// 解析字符串为时间
LocalDateTime parse = LocalDateTime.parse("2017-12-01T16:50:02.415");
System.out.println("parse = [" + parse + "]");
// 获取时区
Set<String> zoneId = ZoneId.getAvailableZoneIds();
zoneId.forEach(zone -> System.out.println("时区 = [" + zone + "]"));
/***********************************************
*****-----Java8新特性(Base64)-----*****
***********************************************/
String name = "zhangmingliang";
try {
// 基本编码
String encoder = Base64.getEncoder().encodeToString(name.getBytes("utf-8"));
System.out.println("encoder = [" + encoder + "]");
// 解码
byte[] decoder = Base64.getDecoder().decode(encoder);
System.out.println("decoder = [" + new String(decoder) + "]");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
相关文章推荐
- Java8部分新特性介绍
- Java8部分新特性介绍 原创 2016年06月22日 17:25:54
- Java8新特性——java8中的排序
- 使用 Apache Solr 实现更加灵巧的搜索,第 1 部分: 基本特性和 Solr 模式
- Java8新特性之StampedLock_动力节点Java学院整理
- JSR 286 Portlet 的新特性,第 1 部分: Portlet 2.0 新特性介绍
- java8 新特性洗了 Lambda 表达式
- Java的一些高级特性(二)——初始化和赋值部分
- java8新特性(七):默认方法
- Java8新特性之一、时间日期API
- 使用 Apache Solr 实现更加灵巧的搜索,第 1 部分: 基本特性和 Solr 模式
- Java8新特性 --Stream
- 总结redis第二部分(redis常用命令、高级命令特性以及与java代码的结合)
- SQLSERVER2005 EXPRESS部分特性小结
- [黑马程序员]13[OC语言]OC三大特性部分学习笔记总结
- C Primer Plus(第五版)中文版第11章编程练习(部分使用新特性,在codeblocks下通过测试,vc++6下运行可能出现错误)
- ES5-ES6的部分新特性
- JAVA8新特性——Lamda表达式
- JAVA8接口的新特性
- Java8的新特性 lambda表达式的几个示例