Stream两大特点
- 可读性强
- 不可变性(基于新的流,不改变原始数据)
整体来说,使用非常舒适
一、steam生成
Stream<String> stream = Stream.of("A", "B", "C", "D");
stream.forEach((item)->{
System.out.println(item);
});
//将list转化为stream,
List<Integer> list = List.of(1,2,3);
list.stream().forEach(System.out::println);
//将array转化为stream
int[] nums = new int[5];
Arrays.stream(nums).forEach((item)->{
System.out.println(item);
});
/**
总结:
of : of初始化List、Map都有,这方面一致
从list和array转化为stream的时候
list相对简单一点,直接stream()就可以了
array复杂一点,Arrays.stream(arr)
* /
二、stream转化为Array和List
(1) 使用toArray得到Array
int[] arr = list.stream().mapToInt((item)->{
//需要返回integer,mapToInt内部会对Integer拆包
return Integer.valueOf(item);
}).toArray();
(2)使用collect得到List(当然也可以转成Set)
List<Integer> numList = Arrays.stream(nums).boxed().collect(Collectors.toList());
numList.stream().forEach(System.out::println);
总结:
将array转为list的时候,需要一个boxed,
当然如果是一个String数组的话,就不需要boxed
三、使用map
//mapTo[Int | Long | Double]: toArray补充,转化为特定类型的stream
int[] arr = list.stream().mapToInt((item)->{
return Integer.valueOf(item); //返回integer,然后应该是内部做了一层转int
}).toArray();
Arrays.stream(arr).forEach(System.out::println);
//使用map,可以从一种流转化为另外一种流
Stream<String> strStream = list.stream().map((item)->{
return String.valueOf(item);
});
strStream.forEach(System.out::println);
四、使用filter
Stream<String> ns = List.of("1","2","3").stream().filter((item)->{
return item == "1";
});
ns.forEach(item->{
System.out.println(":"+item);
});
五、使用使用limit和skip
list.stream().limit(2).forEach(item->{
System.out.println("l:"+item);
});
list.stream().skip(2).forEach(item->{
System.out.println("s:" + item);
});
六、使用min、max和count文章来源:https://www.toymoban.com/news/detail-565133.html
var min = list.stream().min(Integer::compareTo).get().intValue();
System.out.println("min:" +min);
//当然我们也可以使用array试一下,可以看出来,一开始如果就是int,就很方便
var minn = Arrays.stream(nums).min().getAsInt();
System.out.println("minn:" +minn);//先get再转化为intValue
七、使用sorted文章来源地址https://www.toymoban.com/news/detail-565133.html
//自然排序
list.stream().sorted().forEach(item->{
System.out.println("sort:"+item);
});
//自然逆序排序
list.stream().sorted(Comparator.reverseOrder()).forEach(item->{
System.out.println("rsort:"+item);
});;
//根据类属性正向和逆向排序
Student s1 = new Student();
s1.setAge(35);
s1.setName("zhangsan");
Student s2 = new Student();
s2.setAge(20);
s2.setName("lisi");
Student s3 = new Student();
s3.setAge(40);
s3.setName("wangwu");
List<Student> nlist = new ArrayList<>();
nlist.add(s1);
nlist.add(s2);
nlist.add(s3);
//基于属性正向排序
//Comparator的comparing方法
nlist.stream().sorted(Comparator.comparing(Student::getAge)).forEach(item->{
System.out.println("s:"+item.getAge());
});
//逆序,注意reversed是和comparing连着的,链式操作
nlist.stream().sorted(Comparator.comparing(Student::getAge).reversed()).forEach(item->{
System.out.println("rs:"+item.getAge());
});
到了这里,关于【java】常用Stream方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!