笔记 - 10 集合(可变参数 Stream流) 练习

题目1[可变参数]

定义一个方法,可以求出任意个整数的和.然后在主方法中调用.

要求:

调用方法的时候,实参随便写就行,本题重点考察的是自定义方法的形参设计;

效果:

笔记 - 10 集合(可变参数 Stream流) 练习_第1张图片

(实参随便写,所以求和的结果不一样也行)

参考代码:

public static void main(String[] args) {
     
        int i1 = add2(1, 2);
        int i2 = add2(2,3,4);
        int i3 = add2(100, 200,300,400);
        System.out.println("2个整数的和是:"+i1);
        System.out.println("3个整数的和是:"+i2);
        System.out.println("4个整数的和是:"+i3);
    }

    public static int add2(int... a) {
     
        //此时的可变参数a可以当成数组使用
        int sum = 0;
        for (int i : a) {
     
            sum+=i;
        }
        return sum;
    }

题目2[Stream]

随机生成10个10至20之间的随机数(数字允许重复),使用Stream流的技术,找出大于15的元素并打印出来;

效果:

笔记 - 10 集合(可变参数 Stream流) 练习_第2张图片

(随机数结果不要求一致,随机生成啥样就是啥样)

参考代码:

public static void main(String[] args) {
     
        ArrayList<Integer> list = new ArrayList<>();
        Random r = new Random();
        for (int i = 1; i <= 10; i++) {
     
            int sj = r.nextInt(20 - 10 + 1) + 10;
            System.out.println("第"+i+"次生成的随机数是:"+sj);
            list.add(sj);
        }
        //获取流对象,筛选数据并遍历输出
        System.out.print("大于15的元素有:");
        list.stream().filter(y->y>15).forEach(y-> System.out.print(y+" "));
    }

题目3[Stream]

定义集合HashSet,添加以下数据:
“王佳乐”,“张三丰”,“王思聪”,“张飞”,“刘晓敏”,“张靓颖”,“王敏”

(注意set集合保存的数据并不一定会和添加的顺序一致,所以需要先输出set集合中所有的元素查看原始顺序)

要求:
1:使用Stream流的filter()方法筛选集合中所有的“张”姓学员;
筛选后,获取前两个,并打印。
2:重新获取Stream流,用filter()方法筛选出所有的“王”姓学员;
筛选后,跳过第1个,打印剩余的人员。

效果:

在这里插入图片描述

参考代码:

public static void main(String[] args) {
     
        HashSet<String> set = new HashSet<>();
        Collections.addAll(set,"王佳乐","张三丰","王思聪","张飞","刘晓敏","张靓颖","王敏");
        System.out.println("set集合的原始元素是:"+set);
        //使用Stream流的filter()方法筛选集合中所有的“张”姓学员;
        //筛选后,获取前两个,并打印。
        System.out.print("前两个姓张的元素是:");
        set.stream().filter(s -> s.startsWith("张")).limit(2).forEach(s-> System.out.print(s+" "));
        System.out.println();
        //重新获取Stream流,用filter()方法筛选出所有的“王”姓学员;
        //筛选后,跳过第1个,打印剩余的人员。
        System.out.print("跳过第1个姓王的元素是:");
        set.stream().filter(s -> s.startsWith("王")).skip(1).forEach(s-> System.out.print(s+" "));
    }

题目4[Stream]

定义main()方法,按以下顺序编写程序:
定义集合List,添加以下数据:
“王佳乐”,“张三丰”,“王思聪”,“张飞”,“刘晓敏”,“张靓颖”,“王敏”

要求:
1:筛选出所有的“张”姓学员;
2:筛选出所有的“王”姓学员;
3:将两个流合并为一个流后找出名字是3个字的名字数量

效果:
在这里插入图片描述

参考代码:

public static void main(String[] args) {
     
        HashSet<String> set = new HashSet<>();
        Collections.addAll(set,"王佳乐","张三丰","王思聪","张飞","刘晓敏","张靓颖","王敏");
        System.out.println("set集合的原始元素是:"+set);
        //使用Stream流的filter()方法筛选集合中所有的“张”姓学员;
        Stream<String> st1 = set.stream().filter(s -> s.startsWith("张"));
        //重新获取Stream流,用filter()方法筛选出所有的“王”姓学员;
        Stream<String> st2 = set.stream().filter(s -> s.startsWith("王"));
        //将两个流合并为一个流后找出名字是3个字的名字数量
        long count = Stream.concat(st1, st2).filter(s -> s.length() == 3).count();
        System.out.println("姓张的和姓王的并且名字是3个字的人共有:"+count+"个");
    }

题目5综合题[有难度]

本题综合单列集合,双列集合,键盘输入,Stream流操作

1.键盘录入3个学生信息,存储到学生对象(姓名,年龄).然后添加到ArrayList集合中.
2.键盘录入3个居住地信息,添加到另一个集合ArrayList;
3.把两个list集合中的数据收集到同一个map集合中,键是学生对对象,值是居住地址.
4.要求map集合中不能存在相同的学生信息.并按照学生年龄降序排列

5.使用Stream流输出集合中所有姓张的人信息;

效果:

笔记 - 10 集合(可变参数 Stream流) 练习_第3张图片

参考代码:

public class Student{
     
    private String name;
    private int age;
    --自己补上构造方法,getter/setter方法,toString,hashCode和equals方法--
}
public static void main(String[] args) {
     
        //1.键盘录入3个学生信息,存储到学生对象(姓名,年龄).然后添加到ArrayList集合中.
        Scanner sc = new Scanner(System.in);
        ArrayList<Student> list = new ArrayList<>();
        for (int i = 1; i <=3; i++) {
     
            System.out.println("请输入第"+i+"个学生姓名:");
            String name = sc.next();
            System.out.println("请输入第"+i+"个学生年龄:");
            int age = sc.nextInt();
            Student s = new Student(name,age);
            list.add(s);
        }
        ArrayList<String> listAddr = new ArrayList<>();
        //2.键盘录入3个居住地信息,添加到另一个集合ArrayList;
        for (int i = 1; i <= 3; i++) {
     
            System.out.println("请输入第"+i+"个学生居住地:");
            String addr = sc.next();
            listAddr.add(addr);
        }
        //3.把两个list集合中的数据收集到同一个map集合中,键是学生对对象,值是居住地址.
        //4.要求map集合中不能存在相同的学生信息.并按照学生年龄降序排列
        TreeMap<Student,String> map = new TreeMap<>((s1,s2)->s2.getAge()-s1.getAge());
        for (int i = 0; i < list.size(); i++) {
     
            Student key = list.get(i);
            String value = listAddr.get(i);
            map.put(key,value);
        }
        //5.使用Stream流输出集合中所有姓张的人信息;
        map.entrySet().stream().filter(s->s.getKey().getName().startsWith("张")).forEach(s-> System.out.println("学生信息:"+s.getKey()+",对应的居住地是:"+s.getValue()));
    }

你可能感兴趣的:(笔记,java,filter)