Java8 Streams 例子

在本教程中,我们将向你展示一些java 8个例子来演示的流filter(),collect()使用,findany()和orelse().

1. Streams filter() and collect()

1.1 Java 8之前, 过滤一 List 如下所示 :

BeforeJava8.java

 
  1. package com.mkyong.java8;

  2.  
  3. import java.util.ArrayList;

  4. import java.util.Arrays;

  5. import java.util.List;

  6.  
  7. public class BeforeJava8 {

  8.  
  9. public static void main(String[] args) {

  10.  
  11. List<String> lines = Arrays.asList("spring", "node", "mkyong");

  12. List<String> result = getFilterOutput(lines, "mkyong");

  13. for (String temp : result) {

  14. System.out.println(temp); //output : spring, node

  15. }

  16.  
  17. }

  18.  
  19. private static List<String> getFilterOutput(List<String> lines, String filter) {

  20. List<String> result = new ArrayList<>();

  21. for (String line : lines) {

  22. if (!"mkyong".equals(line)) { // we dont like mkyong

  23. result.add(line);

  24. }

  25. }

  26. return result;

  27. }

  28.  
  29. }

Output

 
  1. spring

  2. node

1.2 在java 8,流等效的例子。filter()过滤列表,和collect()一起转换流到一个List中。

NowJava8.java

 
  1. package com.mkyong.java8;

  2.  
  3. import java.util.Arrays;

  4. import java.util.List;

  5. import java.util.stream.Collectors;

  6.  
  7. public class NowJava8 {

  8.  
  9. public static void main(String[] args) {

  10.  
  11. List<String> lines = Arrays.asList("spring", "node", "mkyong");

  12.  
  13. List<String> result = lines.stream() // convert list to stream

  14. .filter(line -> !"mkyong".equals(line)) // we dont like mkyong

  15. .collect(Collectors.toList()); // collect the output and convert streams to a List

  16.  
  17. result.forEach(System.out::println); //output : spring, node

  18.  
  19. }

  20.  
  21. }

Output

 
  1. spring

  2. node

2. Streams filter(), findAny() and orElse()

Person.java

 
  1. package com.mkyong.java8;

  2.  
  3. public class Person {

  4.  
  5. private String name;

  6. private int age;

  7.  
  8. public Person(String name, int age) {

  9. this.name = name;

  10. this.age = age;

  11. }

  12.  
  13. //gettersm setters, toString

  14. }

2.1 在java 8之前, 你会像下面示例的样子获取一个Person 对象 :

BeforeJava8.java

 
  1. package com.mkyong.java8;

  2.  
  3. import java.util.Arrays;

  4. import java.util.List;

  5.  
  6. public class BeforeJava8 {

  7.  
  8. public static void main(String[] args) {

  9.  
  10. List<Person> persons = Arrays.asList(

  11. new Person("mkyong", 30),

  12. new Person("jack", 20),

  13. new Person("lawrence", 40)

  14. );

  15.  
  16. Person result = getStudentByName(persons, "jack");

  17. System.out.println(result);

  18.  
  19. }

  20.  
  21. private static Person getStudentByName(List<Person> persons, String name) {

  22.  
  23. Person result = null;

  24. for (Person temp : persons) {

  25. if (name.equals(temp.getName())) {

  26. result = temp;

  27. }

  28. }

  29. return result;

  30. }

  31. }

Output

Person{name='jack', age=20}

2.2  在java 8使用流等效的例子, 用stream.filter() 过滤List .findAny().orElse (null) 返回一个对象的条件。

NowJava8.java

 
  1. package com.mkyong.java8;

  2.  
  3. import java.util.Arrays;

  4. import java.util.List;

  5.  
  6. public class NowJava8 {

  7.  
  8. public static void main(String[] args) {

  9.  
  10. List<Person> persons = Arrays.asList(

  11. new Person("mkyong", 30),

  12. new Person("jack", 20),

  13. new Person("lawrence", 40)

  14. );

  15.  
  16. Person result1 = persons.stream() // Convert to steam

  17. .filter(x -> "jack".equals(x.getName())) // we want "jack" only

  18. .findAny() // If 'findAny' then return found

  19. .orElse(null); // If not found, return null

  20.  
  21. System.out.println(result1);

  22.  
  23. Person result2 = persons.stream()

  24. .filter(x -> "ahmook".equals(x.getName()))

  25. .findAny()

  26. .orElse(null);

  27.  
  28. System.out.println(result2);

  29.  
  30. }

  31.  
  32. }

Output

 
  1. Person{name='jack', age=20}

  2. null

2.3 多个条件.

NowJava8.java

 
  1. package com.mkyong.java8;

  2.  
  3. import java.util.Arrays;

  4. import java.util.List;

  5.  
  6. public class NowJava8 {

  7.  
  8. public static void main(String[] args) {

  9.  
  10. List<Person> persons = Arrays.asList(

  11. new Person("mkyong", 30),

  12. new Person("jack", 20),

  13. new Person("lawrence", 40)

  14. );

  15.  
  16. Person result1 = persons.stream()

  17. .filter((p) -> "jack".equals(p.getName()) && 20 == p.getAge())

  18. .findAny()

  19. .orElse(null);

  20.  
  21. System.out.println("result 1 :" + result1);

  22.  
  23. //or like this

  24. Person result2 = persons.stream()

  25. .filter(p -> {

  26. if ("jack".equals(p.getName()) && 20 == p.getAge()) {

  27. return true;

  28. }

  29. return false;

  30. }).findAny()

  31. .orElse(null);

  32.  
  33. System.out.println("result 2 :" + result2);

  34.  
  35. }

  36.  
  37.  
  38. }

Output

 
  1. result 1 :Person{name='jack', age=20}

  2. result 2 :Person{name='jack', age=20}

3. Streams filter() and map()

NowJava8.java

 
  1. package com.mkyong.java8;

  2.  
  3. import java.util.Arrays;

  4. import java.util.List;

  5. import java.util.stream.Collectors;

  6.  
  7. public class NowJava8 {

  8.  
  9. public static void main(String[] args) {

  10.  
  11. List<Person> persons = Arrays.asList(

  12. new Person("mkyong", 30),

  13. new Person("jack", 20),

  14. new Person("lawrence", 40)

  15. );

  16.  
  17. String name = persons.stream()

  18. .filter(x -> "jack".equals(x.getName()))

  19. .map(Person::getName) //convert stream to String

  20. .findAny()

  21. .orElse("");

  22.  
  23. System.out.println("name : " + name);

  24.  
  25. List<String> collect = persons.stream()

  26. .map(Person::getName)

  27. .collect(Collectors.toList());

  28.  
  29. collect.forEach(System.out::println);

  30.  
  31. }

  32.  
  33. }

Output

 
  1. name : jack

  2.  
  3. mkyong

  4. jack

  5. lawrence

猜你喜欢

转载自blog.csdn.net/johnt25/article/details/81392194