面试题答案
一键面试设计思路
- 延迟执行利用:Stream的操作分为中间操作和终端操作,中间操作是延迟执行的。我们可以将多个中间操作(如filter、map等)链式调用,直到调用终端操作时才会真正执行,这样可以减少不必要的计算。
- 动态分支判断:在Stream的处理过程中,通过
map
或者flatMap
等操作,结合条件判断语句(如if - else
)来决定数据后续的处理流程。根据数据的属性,将数据导向不同的处理路径。
关键代码片段
假设我们有一个User
类,包含age
和gender
属性,并且有一个List<User>
,我们要根据age
和gender
进行不同的处理。
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
class User {
private int age;
private String gender;
public User(int age, String gender) {
this.age = age;
this.gender = gender;
}
public int getAge() {
return age;
}
public String getGender() {
return gender;
}
}
public class StreamDynamicBranch {
public static void main(String[] args) {
List<User> userList = new ArrayList<>();
userList.add(new User(20, "male"));
userList.add(new User(30, "female"));
userList.add(new User(18, "male"));
List<String> result = userList.stream()
.map(user -> {
if (user.getAge() >= 18 && "male".equals(user.getGender())) {
return "成年男性: " + user.getAge();
} else if (user.getAge() >= 18 && "female".equals(user.getGender())) {
return "成年女性: " + user.getAge();
} else {
return "未成年: " + user.getAge();
}
})
.collect(Collectors.toList());
result.forEach(System.out::println);
}
}
在上述代码中:
- 首先创建了
User
类及其实例,并添加到List
中。 - 使用
Stream
对userList
进行处理,在map
操作中根据age
和gender
属性进行动态分支判断,返回不同格式的字符串。 - 最后通过
collect
终端操作将处理结果收集到List
中并输出。