目录

  • ​​筛选​​
  • ​​循环​​
  • ​​聚合函数​​
  • ​​count​​
  • ​​Map​​

筛选

需求:

  • 筛选出年龄大于20的人

实体类 User.java

package com.example.demo;

public class User {

private String name;

private Integer age;

public User(String name, Integer age) {
this.name = name;
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}

@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}

使用for循环

package com.example.demo;

import java.util.ArrayList;
import java.util.List;

public class Demo {

public static void main(String[] args) {
List<User> userList = new ArrayList<>();

userList.add(new User("刘备", 40));
userList.add(new User("关羽", 30));
userList.add(new User("张飞", 20));

// 筛选出年龄大于20的人
List<User> newUserList = new ArrayList<>();

for (User user : userList) {
if (user.getAge() > 20) {
newUserList.add(user);
}
}

System.out.println(newUserList);
// [User{name='刘备', age=40}, User{name='关羽', age=30}]

}
}

使用Stream

package com.example.demo;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class Demo {

public static void main(String[] args) {
List<User> userList = new ArrayList<>();

userList.add(new User("刘备", 40));
userList.add(new User("关羽", 30));
userList.add(new User("张飞", 20));

// 筛选出年龄大于20的人
List<User> newUserList = userList
.stream()
.filter(u -> u.getAge() > 20)
.collect(Collectors.toList());

System.out.println(newUserList);
// [User{name='刘备', age=40}, User{name='关羽', age=30}]

}
}

循环

JDK7

package com.example.demo;

import java.util.ArrayList;
import java.util.List;

public class Demo {

public static void main(String[] args) {
List<User> userList = new ArrayList<>();

userList.add(new User("刘备", 40));
userList.add(new User("关羽", 30));
userList.add(new User("张飞", 20));


for (User user : userList) {
System.out.println(user);
}
// User{name='刘备', age=40}
// User{name='关羽', age=30}
// User{name='张飞', age=20}
}
}

JDK8

package com.example.demo;

import java.util.ArrayList;
import java.util.List;

public class Demo {

public static void main(String[] args) {
List<User> userList = new ArrayList<>();

userList.add(new User("刘备", 40));
userList.add(new User("关羽", 30));
userList.add(new User("张飞", 20));

userList.stream().forEach(u -> {
System.out.println(u);
});

// 或者
// userList.forEach(u -> {
// System.out.println(u);
// });

// User{name='刘备', age=40}
// User{name='关羽', age=30}
// User{name='张飞', age=20}
}
}

聚合函数

需求:

  • 获取List 中字符串最长的那个

JDK7

package com.example.demo;

import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Demo {

public static void main(String[] args) {
String[] strArr = new String[]{"a", "bb", "ccc"};

List<String> list = Arrays.asList(strArr);
String max = Collections.max(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if (o1.length() < o2.length()) {
return -1;
} else if (o1.length() > o2.length()) {
return 1;
} else {
return o1.compareTo(o2);
}
}
});

System.out.println(max);
// ccc
}
}

JDK8

package com.example.demo;

import java.util.*;

public class Demo {

public static void main(String[] args) {
String[] strArr = new String[]{"a", "bb", "ccc"};

List<String> list = Arrays.asList(strArr);
Optional<String> max = list.stream()
.max(Comparator.comparing(String::length));

System.out.println(max.get());
// ccc
}
}

count

package com.example.demo;

import java.util.*;

public class Demo {

public static void main(String[] args) {
// 获取List中大于2的元素的个数
List<Integer> list = Arrays.asList(1, 2, 3);

long count = list.stream()
.filter(x -> x > 2)
.count();

System.out.println(count);
// 1
}
}

Map

需求:

  • 获取List中的name 数据

JDK7

package com.example.demo;

import java.util.*;

public class Demo {

public static void main(String[] args) {
List<User> userList = new ArrayList<>();

userList.add(new User("刘备", 40));
userList.add(new User("关羽", 30));
userList.add(new User("张飞", 20));

List<String> names = new ArrayList<>();
for (User user : userList) {
names.add(user.getName());
}

System.out.println(names);
// [刘备, 关羽, 张飞]
}
}

JDK8

package com.example.demo;

import java.util.*;
import java.util.stream.Collectors;

public class Demo {

public static void main(String[] args) {
List<User> userList = new ArrayList<>();

userList.add(new User("刘备", 40));
userList.add(new User("关羽", 30));
userList.add(new User("张飞", 20));

List<String> names = userList.stream()
.map(User::getName)
.collect(Collectors.toList());

System.out.println(names);
// [刘备, 关羽, 张飞]
}
}

参考
​​​别再问问JDK的Stream怎么用了好么?面试官​