【JAVA黑马程序员笔记】五 P385-P410(Stream、反射、模块服务)

【JAVA黑马程序员笔记】五 P385-P410(Stream、反射、模块服务),第1张

【JAVA黑马程序员笔记】五 P385-P410(Stream、反射、模块服务) Stream流

Stream流把真正的函数式编程风格引入到java中
一个例子

      ArrayList list = new ArrayList();;
        list.add("林青霞");
        list.add("张曼玉");
        list.add("王祖贤");
        list.add("柳岩");
        list.add("张敏");
        list.add("张无忌");

        //把姓张的名字长度为3的打印出来
        list.stream().filter(s->s.startsWith("张")).filter(s->s.length()==3).forEach(s -> System.out.println(s));

Stream流生成方式

注意map只能间接生成流

        List list = new ArrayList();
        Stream listStream = list.stream();

        Set set = new HashSet();
        Stream setStream = set.stream();


        Map map  = new HashMap();
        Stream keyStream = map.keySet().stream();
        Stream valueStream = map.values().stream();
        Stream> entryStream = map.entrySet().stream();

        String[] strArray = {"hello","world","java"};
        Stream strArrayStream = Stream.of(strArray);
        Stream stringStream2 = Stream.of("hello","world","java");
        Stream intStream = Stream.of(10,20,30);
P387-P391 Stream中间 *** 作

Stream中间 *** 作之filter

没啥说的,看博客上面最第一个代码快吧。

Stream中的link和skip

        ArrayList list = new ArrayList();;
        list.add("林青霞");
        list.add("张曼玉");
        list.add("王祖贤");
        list.add("柳岩");
        list.add("张敏");
        list.add("张无忌");
        
        //输出前三个
        list.stream().limit(3).forEach(System.out::println);

        System.out.println("------------------------");
        //跳过前三个
        list.stream().skip(3).forEach(System.out::println);
        System.out.println("---------------------------------");
        //跳过2个,把剩下的元素的前两个输出
        list.stream().skip(2).limit(2).forEach(System.out::println);
    

Stream中的distinct和concat

        //取前四个作为一个流
        Stream s1 = list.stream().limit(4);
        //跳过2个数据组成一个流
        Stream s2 = list.stream().skip(2);

        //合并s1 s2,并把结果输出
        Stream.concat(s1,s2).forEach(System.out::println);

        //合并s1 s2,并且要求结果不重复
        Stream.concat(s1,s2).distinct().forEach(System.out::println);

Stream中的sorted

    //按照长度进行排序
        list.stream().sorted((ss1,ss2)->ss1.length()-ss2.length()).forEach(System.out::println);

        list.stream().sorted((sss1,sss2)->{
            int num = sss1.length() - sss2.length();
            int num2 = num==0?sss1.compareTo(s2):num;
            return num2;
        });

Stream中的map和mapToInt

        // 字符串转换为整数后输出
        list.stream().map(Integer::parseInt).forEach(System.out::println);

        list.stream().mapToInt(Integer::parseInt).forEach(System.out::println);

        int res = list.stream().mapToInt(Integer::parseInt).sum();
        System.out.println(res);
P392 Stream流终结 *** 作


forEach就不说了

        long count = list.stream().filter(s->s.startsWith("张")).count();
P394 Stream 收集 *** 作

没认真听这讲。。。。。

   ArrayList list = new ArrayList();;
        list.add("林青霞");
        list.add("张曼玉");
        list.add("王祖贤");
        list.add("柳岩");
        list.add("张敏");
        list.add("张无忌");

        Stream listStream = list.stream().filter(s -> s.length() == 3);
       List names =  listStream.collect(Collectors.toList());
       for(String name :names)
           System.out.println(name);

       Set set = new HashSet();
       set.add(10);
       set.add(20);
       set.add(30);
       set.add(40);

       Stream setStream = set.stream().filter(age->age>25);

        Set ages = setStream.collect(Collectors.toSet());
        for(Integer age:ages)
            System.out.println(age);

        String[] strArray = {"林青霞,30","张曼玉,35","王祖贤,33","柳岩,25"};

        Stream arrayStream = Stream.of(strArray).filter((s->Integer.parseInt(s.split(",")[1])>2));
        Map map = arrayStream.collect(Collectors.toMap((s -> s.split(",")[0]), s -> Integer.parseInt(s.split(",")[1])));

        Set keySet = map.keySet();
        for(String key:keySet){
            Integer value = map.get(key);
            System.out.println(key+","+value);
        }
P395 反射

类加载

类的初始化步骤

类加载器

几种类加载器

    public static void main(String[] args) {
        ClassLoader c = ClassLoader.getSystemClassLoader();
        System.out.println(c);//jdk.internal.loader.ClassLoaders$AppClassLoader@251a69d7

        ClassLoader c2 = c.getParent();
        System.out.println(c2);//jdk.internal.loader.ClassLoaders$PlatformClassLoader@3fee733d

        ClassLoader c3 = c2.getParent();
        System.out.println(c3);//null 虚拟机的内置加载器通常表示为null
    }
P397 反射概述

获取class类对象

        Class c1 = Student.class;

        System.out.println(c1);//class reflectionPkg.Student
       Class  c2 = Student.class;
        System.out.println(c1==c2);

        Class c4 = Class.forName("reflectionPkg.Student");
        System.out.println(c1 == c4);
P399 反射获取构造方法并使用

        Class c4 = Class.forName("reflectionPkg.Student");

        Constructor[] cons = c4.getConstructors();

        for(Constructor con:cons)
            System.out.println(con);
        Constructor[] dec = c4.getDeclaredConstructors();
        for(Constructor d:dec)
            System.out.println(d);

        Constructor con = c4.getConstructor();

        Object obj = con.newInstance();
        System.out.println(obj);

反射获取构造方法练习
基本数据类型也是可以通过.class来获得对应的class类型的

        Class c = Class.forName("reflectionPkg.Student");

        Constructor con = c.getConstructor(String.class, int.class, String.class);

        Object obj = con.newInstance("林青霞", 30, "西安");
        System.out.println(obj);

反射获取构造方法练习2
setAccessible为true时取消检查

     Class c = Class.forName("reflectionPkg.Student");

        Constructor con = c.getDeclaredConstructor(String.class);

        con.setAccessible(true);

        Object obj = con.newInstance("林青霞");
        System.out.println(obj);
P402 反射获取成员变量并使用

  Class c = Class.forName("reflectionPkg.Student");
        Field[] fields = c.getFields();
        for(Field field:fields)
            System.out.println(field);

        System.out.println("---------------------");
        Field addressField = c.getField("address");

        Constructor con = c.getConstructor();
        Object obj = con.newInstance();

        addressField.set(obj,"西安");//给obj的成员变量addressField 赋值为西安
        System.out.println(obj);
P404 反射获取成员方法并使用

       Class c = Class.forName("reflectionPkg.Student");
        Constructor con = c.getConstructor();
        // 所有公共方法,包含继承的方法
        Method[] methods = c.getMethods();

        for(Method method:methods)
            System.out.println(method);

        System.out.println("==================================================");
        //所有私有方法,不包含继承的
        Method[] declaredMethods = c.getDeclaredMethods();

        for(Method declaredMethod:declaredMethods)
            System.out.println(declaredMethod);
        System.out.println("===========================================");

        Method m = c.getMethod("method1");
        Object obj = con.newInstance();

        m.invoke(obj);

一个练习

额。。有点累了。。。2021.12.16 21:33不过快下班咯

        Class c = Class.forName("reflectionPkg.Student");

        Constructor con = c.getConstructor();
        Object obj = con.newInstance();

        Method m1 = c.getMethod("method1");
        m1.invoke(obj);

        Method m2 = c.getMethod("method2", String.class);

        m2.invoke(obj,"hello");
        Method m3 = c.getMethod("method3",String.class,int.class);
        Object o = m3.invoke(obj,"aaa", 30);
        System.out.println(o);

越过泛型检查

     ArrayList array = new ArrayList<>();
        array.add(10);
        array.add(20);
        array.add(30);
        array.add(40);

        Class c = array.getClass();
        Method m = c.getMethod("add",Object.class);
       m.invoke(array,"hello");
       m.invoke(array,"world");

        System.out.println(array);

反射运行配置文件指定内容
没写这个题

P408-P410 模块化

模块的基本使用

演示:
算了。。ubuntu下截图很麻烦。。不截图了

模块服务的使用

模块服务的使用
模块的服务使用者,只需要面向接口编程就行,服务提供者只需要提供具体的实现类就行。

差不多,完结撒花!
22:12

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5672279.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存