-
Stream
用于操作集合元素的流式结构,提供了大量的函数式接口方便使用---jdk1.8新特性 。
泛型:参数化类型----jdk1.5出现的。泛型可以支持任意引用数据类型,泛型的擦除在编译时期
public class StreamDemo {
public static void main(String[] args) {
//创建集合对象
List<String> list = new ArrayList<>();
list.add("C");
list.add("Python");
list.add("C++");
list.add("C#");
list.add("Java");
list.add("Go");
list.add("VB");
list.add("PHP");
//筛选出以C开头的元素
//遍历集合元素
// for (String string:list) {
// //判断是否以C开头
// if (string.startsWith("C")){
// System.out.println(string);
// }
// }
//获取流式结构
Stream<String> s=list.stream();
// s.filter(new Predicate<String>() {
// //重写方法进行筛选元素
// @Override
// public boolean test(String s) {
// return s.startsWith("C");
// }
// }).forEach(new Consumer<String>() {
// //重写方法把筛选的元素进行输出
// @Override
// public void accept(String s) {
// System.out.println(s);
// }
// });
//Lambda表达式
// s.filter(str->str.startsWith("C")).sorted((str1,str2)->str2.compareTo(str1))//排序
// .forEach(str-> System.out.println(str));
//统计匹配数
System.out.println(s.filter(str->str.startsWith("C")).count());
}
}
自定义泛型
public class TypeDemo {
public static void main(String[] args) {
TDemo<String> td = new TDemo<>();
//属性类型确定了
td.t="avc";
td.m(new Integer(0));
td.m("acx");
td.m(true);
td.m(2.3);
}
}
//自定义泛型类
//类名<大写字母>
/*
* E ---elements元素
* T----Type类型
* R----Result结果
* K----键
* V----值
* */
class TDemo<E>{
//属性
E t;//属性类型可以是任意的引用类型
//给定的引用类型可能不能直接创建对象,比如接口
//E t = new E();
//泛型K可以当做参数的属性类型,可以接口任意的引用类型
public <K> void m(K i){
System.out.println(i.getClass()); //允许传入不同类型的参数
}
}
泛型上下限
public class TypeDemo {
public static void main(String[] args) {
//
List<Integer> list1 = new ArrayList<>();
//
list1.add( 12 );
list1.add( 122 );
list1.add( 212 );
list1.add( 312 );
list1.add( 112 );
//集合对象
List<Double> list2 = new ArrayList<>();
//
list2.add(1.0);
list2.add(1.2);
list2.add(2.1);
list2.add(6.3);
list2.add(1.5);
m(list1);
m(list2);
}
//只遍历数字类型的集合
//数字包装类的统一父类是Number
//泛型没有向上造型
//表示最大在Number类型 <? extends Number> ----可以传入的类型包括 本类/本接口或者子类以及子接口
//泛型的上限
public static void m(List<? extends Number> list){
for (Object object: list) {
System.out.println(object);
}
}
//泛型的下限
//传入的类型最小类型是String
//<? super 类/接口>----可以传入的类型要么是本类/本接口,或者是父类以及父接口
public void n(List<? super String> list){
}
}