
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
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 收集 *** 作
没认真听这讲。。。。。
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条)