Stream
public class StreamDemo3 {
public static void main(String[] args) {
/*
Stream流的中间方法:
filter 过滤
limit 取用前几个
skip 跳过前几个
distinct 去重,依赖(hashCode和equals方法)
concat 合并a流和b流为一个流 //静态方法,用Stream接口名调用
map 类型转换
map() 是一个中间操作方法,作用是把流中的每个元素按照指定的函数进行转换,最终返回一个包含转换后元素的新流。
*/
ArrayList<String> list=new ArrayList<>();
Collections.addAll(list,"haha","xiangxiang","baby","xixi");
list.stream().filter(str->str.length()==4).forEach(str-> System.out.println(str));
System.out.println("----------------");
list.stream().skip(1).limit(1).forEach(str-> System.out.println(str));//xiangxiang
list.stream().limit(2).skip(1).forEach(str-> System.out.println(str));//xiangxiang
System.out.println("----------------");
//distinct去重
ArrayList<String> list2=new ArrayList<>();
Collections.addAll(list2,"haha","haha","haha","xiangxiang","baby","xixi");
list2.stream().distinct().forEach(str-> System.out.println(str));
System.out.println("----------------");
//concat合并
Stream.concat(list.stream(),list2.stream()).forEach(str-> System.out.println(str));
System.out.println("----------------");
//map类型转换
ArrayList<String> list3=new ArrayList<>();
Collections.addAll(list3,"haha-18","xiangxiang-17","baby-111","xixi-666");
//只获取其中的年龄打印出来
//map方法中有两个类型,一个是原本的类型,一个是转换后的类型
//apply的形参s:依次表示其中每个数据
//apply的返回值:表示转换后的类型
list3.stream()
.map(s->Integer.parseInt(s.split("-")[1]))
.forEach(str-> System.out.println(str));
}
}
-----------------------------------------
public class StreamDemo4 {
public static void main(String[] args) {
/*
stream流的终结方法:
void forEach(Consumer action) //遍历
long count() //统计个数
toArray() //转换为数组
*/
ArrayList<String> list=new ArrayList<>();
Collections.addAll(list,"haha","xiangxiang","baby","xixi");
//遍历
list.stream().forEach(str-> System.out.println(str));
System.out.println("----------------");
//统计个数
long count = list.stream().count();
System.out.println(count);
System.out.println("----------------");
//转换为数组
Object[] arr1 = list.stream().toArray();//存储到Object类型的数组中
System.out.println(Arrays.toString(arr1));
System.out.println("-----------------");
//value表示数组中的元素个数
String[] arr2 = list.stream().toArray(value -> new String[value]);
System.out.println(Arrays.toString(arr2));
}
}
-----------------------------------------
public class StreamDemo5 {
public static void main(String[] args) {
/*
collect( Collector collector) 收集流中的数据,放到集合中(list set map)
收集到map集合中,键不能重复
*/
ArrayList<String> list=new ArrayList<>();
Collections.addAll(list,"haha","xiangxiang","baby","xixi");
//收集到list集合中
List<String> list1 = list.stream().filter(str -> str.startsWith("x")).collect(Collectors.toList());
System.out.println(list1);
System.out.println("----------------");
//收集到set集合中
Set<String> list2 = list.stream().filter(str -> str.startsWith("x")).collect(Collectors.toSet());
System.out.println(list2);
System.out.println("----------------");
//收集到map集合中
//key表示键,value表示值
//toMap方法有三个参数,第一个参数表示键,第二个参数表示值,第三个参数表示键冲突的解决方式
Map<String, Integer> map = list.stream().filter(str -> str.startsWith("x")).collect(Collectors.toMap(s -> s, s -> s.length()));
System.out.println(map);
}
}
-----------------------------------------------
public class StreamDemo1 {
public static void main(String[] args) {
//需求:
//把所有张开头的放在一个新数组中
//把张开头的名字的长度为3的放在一个新数组中
//遍历新数组
ArrayList<String> list=new ArrayList<>();
list.add("张无忌");
list.add("周芷若");
list.add("赵敏");
list.add("张强");
list.add("张三丰");
ArrayList<String> listZhang =new ArrayList<>();
for (String s : list) {
if(s.startsWith("张")){
listZhang.add(s);
}
}
ArrayList<String> listzhang3 =new ArrayList<>();
for (String s : listZhang) {
if(s.length()==3){
listzhang3.add(s);
}
}
for (String s : listzhang3) {
System.out.println(s);
}
//使用Stream流
list.stream().filter(name->name.startsWith("张")).filter(name->name.length()==3).forEach(name-> System.out.println(name));
}
}
----------------------------
public class StreamDemo2 {
public static void main(String[] args) {
//Stream流的使用方法
/*
单列集合 default Stream<E> stream() collection中的默认方法
双列集合 无 无法直接使用Stream流,要转成set集合或者list集合
数组 public static <T> Stream<T> stream(T[] array) Arrays工具类中的静态方法
一堆零散数据 public static <T> Stream<T> stream(T... values) stream接口中的静态方法
*/
//1.单列集合获取Stream流
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list,"haha","xiangxiang","xixi","baby");
list.stream().filter(str->str.length()==4).filter(str->str.startsWith("h")).forEach(str-> System.out.println(str));
//2.双列集合获取Stream流
Map<String,Integer> map = new HashMap<>();
map.put("haha",1);
map.put("xiangxiang",2);
map.put("xixi",3);
map.put("baby",4);
//小加花(把其变成不可变的双列集合)
Map<String, Integer> map1 = Map.copyOf(map);
Set<Map.Entry<String, Integer>> entries = map1.entrySet();
entries.stream().filter(entry->entry.getKey().length()==4).filter(entry->entry.getValue()==1).forEach(entry-> System.out.println(entry));
System.out.println("----------------");
//3.数组获取Stream流
String[] arr={"haha","xiangxiang","xixi","baby"};
Arrays.stream(arr).forEach(str-> System.out.println(str));
System.out.println("----------------");
//4.一堆零散数据获取Stream流
//可以传递零散数据,也可以传递数组
//但是数组必须是引用数据类型的数据
int[] arr2={1,2,3};
Stream.of("haha","xiangxiang","xixi","baby").forEach(str-> System.out.println(str));
Stream.of(arr2).forEach(s-> System.out.println(s));//[I@312b1dae
}
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Hexo!