JAVA8的StreamAPI与SQL语法的对应关系
简单介绍JAVA8的StreamAPI
他是处理数组与集合时一种比较简易的写法,编译后与JAVA8之前的for循环、增强for循环功能一致,在经过反编译后查看源代码实际就是for循环;只不过增加了代码的简洁性、易读性,也增加了处理速度。
filter语法 = where关键字
where的语法是【字段名 比较运算符 字段值】
filter的写法:
List<String> list = new ArrayList<>();
list.add("abcd");
list.add("aaaa");
list.add("1234");
list.add("qwer");
list.stream().filter(f -> f.startsWith("a")).forEach(System.out::println);
这段代码会将集合内满足以a开头的的元素打印到控制台:
abcd
aaaa
noneMatch、allMatch、anyMatch语法 = count与where关键字
List<String> list = new ArrayList<>();
list.add("abcd");
list.add("aaaa");
list.add("1234");
list.add("qwer");
System.out.println(list.stream().anyMatch(m -> m.startsWith("a")));
System.out.println(list.stream().noneMatch(m -> m.startsWith("a")));
System.out.println(list.stream().allMatch(m -> m.startsWith("a")));
这段代码会得到三个结果:
anyMatch是任意匹配,返回true
noneMatch是全部不匹配,返回false
allMatch是全部匹配,返回false
collect语法 = group by关键字
public class Test {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Test(String name, int age) {
this.name = name;
this.age = age;
}
public static void main(String[] args) {
List<Test> list = new ArrayList<>();
list.add(new Test("小美",18));
list.add(new Test("小懒",8));
list.add(new Test("小喜",33));
list.add(new Test("小暖",18));
list.stream().collect(Collectors.groupingBy(Test::getAge)).get(18).forEach(item -> {
System.out.println(item.getName());
});
}
}
这段代码的groupingBy会将List集合转为一个新的Map<Integer,List>集合,然后获得年龄为18的把名字打印到控制台:
小美
小暖
sorted语法 = order by关键字
public class Test {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Test(String name, int age) {
this.name = name;
this.age = age;
}
public static void main(String[] args) {
List<Test> list = new ArrayList<>();
list.add(new Test("小美",18));
list.add(new Test("小懒",8));
list.add(new Test("小喜",33));
list.add(new Test("小暖",18));
list.stream().sorted(Comparator.comparing(Test::getAge)).forEach(item -> {
System.out.println(item.getName());
});
System.out.println("====================");
list.stream().sorted(Comparator.comparing(Test::getAge).reversed()).forEach(item -> {
System.out.println(item.getName());
});
}
}
这段代码会分别将年龄正序与年龄倒序的名字打印到控制台:
小懒
小美
小暖
小喜
====================
小喜
小美
小暖
小懒