Stream流把真正的函数式编程风格引入到java中
一个例子
ArrayListlist = 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只能间接生成流
ListP387-P391 Stream中间 *** 作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);
Stream中间 *** 作之filter
没啥说的,看博客上面最第一个代码快吧。
Stream中的link和skip
ArrayListlist = 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
//取前四个作为一个流 Streams1 = 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 收集 *** 作
没认真听这讲。。。。。
ArrayListP395 反射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); }
类加载
类的初始化步骤
类加载器
几种类加载器
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类对象
ClassP399 反射获取构造方法并使用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);
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);
越过泛型检查
ArrayListarray = new ArrayList<>(); array.add(10); array.add(20); array.add(30); array.add(40); Class extends ArrayList> c = array.getClass(); Method m = c.getMethod("add",Object.class); m.invoke(array,"hello"); m.invoke(array,"world"); System.out.println(array);
反射运行配置文件指定内容
没写这个题
模块的基本使用
演示:
算了。。ubuntu下截图很麻烦。。不截图了
模块服务的使用
模块服务的使用
模块的服务使用者,只需要面向接口编程就行,服务提供者只需要提供具体的实现类就行。
差不多,完结撒花!
22:12
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)