听课遇到个有意思的题目:
请按照给出的数据,找出同时满足以下条件的用户:偶数id,年龄大于24
用户名字转为大写且倒叙排列,只输出第一个用户名字
public static void main(String[] args) {
User u1 = new User(11, "a", 23);
User u2 = new User(12, "b", 24);
User u3 = new User(13, "c", 22);
User u4 = new User(14, "d", 28);
User u5 = new User(16, "e", 26);
List<User> list = Arrays.asList(u1, u2, u3, u4, u5);
//以下是你的代码实现
}
我当时是这么写的
public static void main(String[] args) {
User u1 = new User(11, "a", 23);
User u2 = new User(12, "b", 24);
User u3 = new User(13, "c", 22);
User u4 = new User(14, "d", 28);
User u5 = new User(16, "e", 26);
List<User> list = Arrays.asList(u1, u2, u3, u4, u5);
//以下是你的代码实现
User u = null;
for (User user : list) {
// 倒序取第一个,就相当于正序取最后一个,所以当for循环结束,u就是要找的那个user对象
if (user.getId() % 2 == 0 && user.getAge() > 24) {
u = user;
}
}
// 取其username转换为大写显示
System.out.println(u.getUserName().toUpperCase());
结果老师用Stream流做,简直太震惊了,然后自己又写了写,加上了注释
public static void main(String[] args) {
User u1 = new User(11, "a", 23);
User u2 = new User(12, "b", 24);
User u3 = new User(13, "c", 22);
User u4 = new User(14, "d", 28);
User u5 = new User(16, "e", 26);
List<User> list = Arrays.asList(u1, u2, u3, u4, u5);
//以下是你的代码实现
list.stream() // 转换为stream流
.filter(u -> u.getId() % 2 == 0 && u.getAge() > 24) // 过滤出id为偶数且年龄大于24的对象
.map(u -> u.getUserName().toUpperCase()) // 用对象获取(映射)对应的名字的大写
.sorted(Comparator.reverseOrder()) // 颠倒名字的自然排序(倒序)
.limit(1l) // 截取第一个
.forEach(System.out::println);
看着挺装13的,感觉上java8好多语法跟以前的java都不是同一个语言了o(╯□╰)o,可能是没用惯吧,总觉得没有传统的那种方式用着踏实。。。
不过老师说java8以后jdk源码中大量的使用这种新特性,这个是发展趋势~
嗯,老师说的都是对的(0_0)