在本教程中,我们将向你展示一些java 8个例子来演示的流filter(),collect()使用,findany()和orelse().
1. Streams filter() and 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<String> lines = Arrays.asList("spring", "node", "mkyong");
-
List<String> result = getFilterOutput(lines, "mkyong");
-
for (String temp : result) {
-
System.out.println(temp); //output : spring, node
-
}
-
}
-
private static List<String> getFilterOutput(List<String> lines, String filter) {
-
List<String> 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,流等效的例子。filter()过滤列表,和collect()一起转换流到一个List中。
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<String> lines = Arrays.asList("spring", "node", "mkyong");
-
List<String> result = lines.stream() // convert list to stream
-
.filter(line -> !"mkyong".equals(line)) // we dont like mkyong
-
.collect(Collectors.toList()); // collect the output and convert streams to a List
-
result.forEach(System.out::println); //output : spring, node
-
}
-
}
Output
-
spring
-
node
2. Streams filter(), findAny() and 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之前, 你会像下面示例的样子获取一个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<Person> 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<Person> 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<Person> persons = Arrays.asList(
-
new Person("mkyong", 30),
-
new Person("jack", 20),
-
new Person("lawrence", 40)
-
);
-
Person result1 = persons.stream() // Convert to steam
-
.filter(x -> "jack".equals(x.getName())) // we want "jack" only
-
.findAny() // If 'findAny' then return found
-
.orElse(null); // If not found, return 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<Person> 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() and 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<Person> 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) //convert stream to String
-
.findAny()
-
.orElse("");
-
System.out.println("name : " + name);
-
List<String> collect = persons.stream()
-
.map(Person::getName)
-
.collect(Collectors.toList());
-
collect.forEach(System.out::println);
-
}
-
}
Output
-
name : jack
-
mkyong
-
jack
-
lawrence