java8 filter return_java8新特性Java 8 Streams filter示例 - Java教程
在這篇教程中我將向你展示 filter(), collect(), findAny() 和 orElse() 的用法
1. Streams filter() 和 collect()
1.1 在 Java 8 以前, 像下面這樣過濾一個 List:
BeforeJava8.java
package com.mkyong.java8;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class BeforeJava8 {
public static void main(String[] args) {
List lines = Arrays.asList("spring", "node", "mkyong");
List result = getFilterOutput(lines, "mkyong");
for (String temp : result) {
System.out.println(temp); //output : spring, node
}
}
private static List getFilterOutput(List lines, String filter) {
List result = new ArrayList<>();
for (String line : lines) {
if (!"mkyong".equals(line)) { // we dont like mkyong
result.add(line);
}
}
return result;
}
}
Output
spring
node
1.2 Java 8里面的等價寫法: 使用collect()將一個List轉(zhuǎn)化為steam(流),然后使用stream.filter() 來過濾它.
NowJava8.java
package com.mkyong.java8;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class NowJava8 {
public static void main(String[] args) {
List lines = Arrays.asList("spring", "node", "mkyong");
List result = lines.stream() // 轉(zhuǎn)化為一個流
.filter(line -> !"mkyong".equals(line)) // 排除 'mkyong'
.collect(Collectors.toList()); // 吧輸出流收集回List中
result.forEach(System.out::println); //輸出 : spring, node
}
}
Output
spring
node
2. Streams filter(), findAny() 和 orElse()
Person.java
package com.mkyong.java8;
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
//gettersm setters, toString
}
2.1 在Java 8以前, 你想通過name獲取一個Person通常像這樣 :
BeforeJava8.java
package com.mkyong.java8;
import java.util.Arrays;
import java.util.List;
public class BeforeJava8 {
public static void main(String[] args) {
List persons = Arrays.asList(
new Person("mkyong", 30),
new Person("jack", 20),
new Person("lawrence", 40)
);
Person result = getStudentByName(persons, "jack");
System.out.println(result);
}
private static Person getStudentByName(List persons, String name) {
Person result = null;
for (Person temp : persons) {
if (name.equals(temp.getName())) {
result = temp;
}
}
return result;
}
}
Output
Person{name='jack', age=20}
2.2 在Java 8里面的等價操作是使用 stream.filter()來過濾 List,使用 .findAny().orElse (null) 來返回指定的對象.
NowJava8.java
package com.mkyong.java8;
import java.util.Arrays;
import java.util.List;
public class NowJava8 {
public static void main(String[] args) {
List persons = Arrays.asList(
new Person("mkyong", 30),
new Person("jack", 20),
new Person("lawrence", 40)
);
Person result1 = persons.stream() // 轉(zhuǎn)化為流
.filter(x -> "jack".equals(x.getName())) // 只過濾出"jack"
.findAny() // 如果找到了就返回
.orElse(null); // 如果找不到就返回null
System.out.println(result1);
Person result2 = persons.stream()
.filter(x -> "ahmook".equals(x.getName()))
.findAny()
.orElse(null);
System.out.println(result2);
}
}
Output
Person{name='jack', age=20}
null
2.3 多重條件指定.
NowJava8.java
package com.mkyong.java8;
import java.util.Arrays;
import java.util.List;
public class NowJava8 {
public static void main(String[] args) {
List persons = Arrays.asList(
new Person("mkyong", 30),
new Person("jack", 20),
new Person("lawrence", 40)
);
Person result1 = persons.stream()
.filter((p) -> "jack".equals(p.getName()) && 20 == p.getAge())
.findAny()
.orElse(null);
System.out.println("result 1 :" + result1);
//or like this
Person result2 = persons.stream()
.filter(p -> {
if ("jack".equals(p.getName()) && 20 == p.getAge()) {
return true;
}
return false;
}).findAny()
.orElse(null);
System.out.println("result 2 :" + result2);
}
}
Output
result 1 :Person{name='jack', age=20}
result 2 :Person{name='jack', age=20}
3. Streams filter() 和 map()
NowJava8.java
package com.mkyong.java8;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class NowJava8 {
public static void main(String[] args) {
List persons = Arrays.asList(
new Person("mkyong", 30),
new Person("jack", 20),
new Person("lawrence", 40)
);
String name = persons.stream()
.filter(x -> "jack".equals(x.getName()))
.map(Person::getName) //吧流轉(zhuǎn)化為String
.findAny()
.orElse("");
System.out.println("name : " + name);
List collect = persons.stream()
.map(Person::getName)
.collect(Collectors.toList());
collect.forEach(System.out::println);
}
}
Output
name : jack
mkyong
jack
lawrence
注意
Highly recommend this Streams tutorial – Processing Data with Java SE 8 Streams
References
總結(jié)
以上是生活随笔為你收集整理的java8 filter return_java8新特性Java 8 Streams filter示例 - Java教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql备份需要停应用吗_对于含有in
- 下一篇: java 线性表的表示和实现_线性表中顺