关闭

Java风骚地操作集合

标签: 函数式编程Lambda-表达式
34人阅读 评论(0) 收藏 举报
分类:

对两个同类型集合

retainAll //交集
removeAll //差集
addAll    //并集

单个集合
例:找出年龄超过20岁的学生

student.removeIf(x -> x.getAge() <= 20);

 List<Student> stu =
  student.stream()
         .filter(x -> x.getAge() > 20)
         .collect(Collectors.toList());

对应sql

SELECT * FROM student WHERE age > 20

对象关联
例 1:找出有一门成绩超过80分的学生

student.removeIf(x -> (
    Score.stream()
         .filter(y -> y.getSco() > 80 
              && y.getStuid() == x.getId())
         .count() == 0
                ));

List<Student> stu =
    student.stream()
           .filter(x -> (
               Score.stream()
                    .filter(y -> y.getSco() > 80 
                         && y.getStuid() == x.getId())
                    .count() != 0)
           ).collect(Collectors.toList());

对应sql

SELECT DISTINCT student.* FROM student 
LEFT JOIN score ON student.id = score.stuId 
WHERE score.sco > 80 

例 2:找出超过两门以上成绩都在70以下的学生

student.removeIf(x -> (
    Score.stream()
         .filter(y -> y.getSco() < 70 
              && y.getStuid() == x.getId())
         .count() <= 1
                ));

List<Student> stu =
 student.stream()
        .filter(x -> (
        Score.stream()
             .filter(y -> y.getSco() < 70 
                  && y.getStuid() == x.getId())
             .count() > 1)
       ).collect(Collectors.toList());

对应sql

SELECT * FROM student WHERE id IN(
SELECT stuId FROM score WHERE sco < 70 
GROUP BY stuId HAVING (COUNT(*) > 1))
1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:531次
    • 积分:93
    • 等级:
    • 排名:千里之外
    • 原创:9篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条