概述
javaSE_day17
- 1. 泛型
-
- 什么是泛型
- 1.1 泛型类
-
- 泛型类派生出的子类
- 1.2 泛型接口
- 1.3 泛型方法
- 1.5 泛型的使用 -- 通配符 “?”
-
- 设置通配符的上限、下限
- 通配符的错误使用
- 2. Stream
-
- 2.1 流式思想
- 2.2 stream的特性
- 2.3使用Stream流的步骤
-
- 2.3.1 数据源(source)
- 2.3.2 获取流对象
- 2.4 常用方法
-
- 练习
1. 泛型
什么是泛型
java泛型设计原则:编译不出错,运行时不会出现ClassCastException
1.1 泛型类
在类上定义的泛型,在方法中也可以使用
泛型类派生出的子类
- 子类明确泛型类的类型参数变量
- 子类不明确泛型类的类型参数变量
eg:
以接口为例:泛型接口
1.2 泛型接口
interface Demo < T > { }
1.3 泛型方法
1.5 泛型的使用 – 通配符 “?”
? 表示任意数据类型
设置通配符的上限、下限
- List<? extends Animal> list
- List<? super Number> list
通配符的错误使用
- class A<?>{}
- public <?> void t(List<?> list){}
- List<?> list = new ArrayList<?>();
2. Stream
和io没有任何关系
2.1 流式思想
- 像生产流水线一样,一个操作接一个操作。
- 使用流操作集合更高效
2.2 stream的特性
- stream不存储数据
- stream不改变源数据
- stream的延迟执行特性
2.3使用Stream流的步骤
数据源 → 转换成流 → 操作1 → 操作2 →……
2.3.1 数据源(source)
可以是集合、数组等。
2.3.2 获取流对象
- Stream streamStr = liststr .stream();//把集合变成流
- Stream streamInt = Stream.of(num);//把数组变成流
Stream只能被使用一次,如果还想使用,必须重新获取流。
如果不重新获取,会得到异常:stream has already been operated upon or closed
2.4 常用方法
- filter(): 用于通过设置的条件过滤出元素
延迟执行,不立刻执行,遇到终结性方法时才执行 - map(): 用于映射每个元素到对应的结果
- limit(): 用于获取指定数量的流
- 跳过前n个stream.skip
- 流的连接Stream.concat(stream1,stream2)
- 返回数量count 终结性方法
- 可以把流转换为 List 类型:collect(Collectors.toList()); 终结性方法
- 求和的方法reduce(0, (x, y) -> x + y)
- distinct(): 去重
- sorted(): 排序
- forEach: 遍历 终结性方法
(返回值不是流,则为终结性方法)
练习
- 有如下整数1,-2,-3,4,-5,使用Stream取元素绝对值并打印。
public static void test1() {
Stream<Integer> stream = Stream.of(1,-2,-3,4,-5);
stream.forEach(e->System.out.println(Math.abs(e)));
}
- 给定一个数字列表,如何返回一个由每个数的平方构成的列表。给定【1,2,3,4,5】, 应该返回【1,4,9,16,25】。
public static void test2() { Stream<Integer> stream = Stream.of(1,2,3,4,5); stream.map(e->e*e).forEach(e->System.out.println(e));
<span class="token punctuation">}</span>
- 有如下7个元素黄药师,冯蘅,郭靖,黄蓉,郭芙,郭襄,郭破虏,使用Stream将以郭字开头的元素存入新集合。
public static void test3() {
Stream<String> stream = Stream.of("黄药师","冯衡","郭靖","黄蓉","郭芙","郭襄","郭破虏");
List<String> list = stream.filter(e->e.startsWith("郭")).collect(Collectors.toList());
System.out.println(list);
}
- 已知ArrayList集合中有如下元素{陈玄风、梅超风、陆乘风、曲灵风、武眠风、冯默风、罗玉风},使用Stream
(1)取出前2个元素并在控制台打印输出。
(2)取出后2个元素并在控制台打印输出。
public static void test4() { List<String> liststr = new ArrayList<>(); liststr.add("陈玄风");liststr.add("梅超风");liststr.add("陆乘风"); liststr.add("曲灵风");liststr.add("武眠风"); liststr.add("冯默风");liststr.add("罗玉风"); Stream<String> streamStr = liststr.stream(); streamStr.limit(2).forEach(e->System.out.println(e));
List<span class="token generics function"><span class="token punctuation"><</span>String<span class="token punctuation">></span></span> liststr2 <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ArrayList</span><span class="token operator"><</span><span class="token operator">></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> liststr2<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span><span class="token string">"陈玄风"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>liststr2<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span><span class="token string">"梅超风"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>liststr2<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span><span class="token string">"陆乘风"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> liststr2<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span><span class="token string">"曲灵风"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>liststr2<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span><span class="token string">"武眠风"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> liststr2<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span><span class="token string">"冯默风"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>liststr2<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span><span class="token string">"罗玉风"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Stream<span class="token generics function"><span class="token punctuation"><</span>String<span class="token punctuation">></span></span> streamStr2 <span class="token operator">=</span> liststr2<span class="token punctuation">.</span><span class="token function">stream</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> streamStr2<span class="token punctuation">.</span><span class="token function">skip</span><span class="token punctuation">(</span>liststr2<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">forEach</span><span class="token punctuation">(</span>System<span class="token punctuation">.</span>out<span class="token operator">:</span><span class="token operator">:</span>println<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span>
- 用 map 和 reduce 方法数一数流中有多少个Employee
List emps = Arrays.asList(
new Employee(102, “李四”, 59),
new Employee(101, “张三”, 18),
new Employee(103, “王五”, 28),
new Employee(104, “赵六”, 8),
new Employee(105, “田七”, 38)
);
public static void test5() {
List<Employee> emps = Arrays.asList(
new Employee(102,"李四",59),new Employee(101,"张三",18),new Employee(103,"王五",28),
new Employee(104,"赵六",8),new Employee(105,"田七",38) );
Stream<Employee> stream = emps.stream();
System.out.println(stream.map(e->1).reduce(0,(x,y)->x+y));
}
- 找出2011年发生的所有交易, 并按交易额排序(从低到高)
class Transaction {
private int year; //交易时间
private int value; //交易额
方法。。。。
List transactions =Arrays.asList(
new Transaction(2011, 300),
new Transaction(2012, 1000),
new Transaction(2011, 400),
new Transaction(2012, 710),
new Transaction(2011, 200),
new Transaction(2012, 700),
new Transaction(2012, 950)
);
public static void test6() {
List<Transaction> transactions = Arrays.asList(
new Transaction(2011,300),
new Transaction(2012,1000),
new Transaction(2011,400),
new Transaction(2012,710),
new Transaction(2011,200),
new Transaction(2012,700),
new Transaction(2012,950)
);
transactions.stream().filter(e->e.getYear()==2011).sorted((t1,t2)->t1.getValue()-t2.getValue()).forEach(e->System.out.println(e));
}
最后
以上就是甜蜜马里奥为你收集整理的javaSE_day17 学习笔记 ——泛型、Stream1. 泛型2. Stream的全部内容,希望文章能够帮你解决javaSE_day17 学习笔记 ——泛型、Stream1. 泛型2. Stream所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复