stream流
Stream流的skip方法
1 | //分页显示 |
skip(lang n)
是一个跳过前n
个元素的中间流操作,skip()
方法用于跳过前面n个元素,然后再返回新的流
(1)当n<0
时,抛IllegalArgumentException
异常;
(2)当n=0
时,相当没有跳过任何元素,原封不动、完璧归赵;
(3)当0<n<length
时,跳过n个元素后,返回含有剩下的元素的流;
(4)当n>=length
时,跳过所有元素,返回空流。
对于
limit()
方法,它是用于限制流中元素的个数,即取前n个元素,返回新的流(1)当
n<0
时,抛IllegalArgumentException
异常;(2)当
n=0
时,不取元素,返回空流;(3)当
0<n<length
时,取前n个元素,返回新的流;(4)当
n>=length
时,取所有元素,原封不动、完璧归赵。
但是它们有一些区别 skip
操作必须时刻监测流中元素的状态。才能判断是否需要丢弃。所以 skip
属于状态操作。
而 limit
只关心截取的是不是其参数 maxsize
(最大区间值),其它毫不关心。一旦达到就立马中断操作返回流。所以 limit
属于一个中断操作。
Stream流的toMap方法
1 | List<SysTemplateData> sysTemplateData = |
one -> one.getValue()
:指定了作为键的属性。对于每个SysTemplateData
对象,这里使用getValue()
方法作为键。one -> one
:指定了作为值的属性。每个SysTemplateData
对象本身作为值。
最终,得到的 templateDataMap
就是一个 Map
,其中键是 SysTemplateData
对象的 value
属性,值是对应的 SysTemplateData
对象。
1 | Map<K, V> toMap(Function<? super T, ? extends K> keyMapper, |
keyMapper
是一个函数,用于将 Stream 中的元素映射为 Map 的键。valueMapper
是一个函数,用于将 Stream 中的元素映射为 Map 的值。
如果存在重复的键(即两个人有相同的名字),toMap
方法默认会抛出 IllegalStateException
。为了解决这个问题,我们可以提供一个合并函数
,例如:
1 | Map<String, Integer> nameToAgeMap = people.stream() |
Stream流结合Collectors使用
1 | List<PFormulaDetail> uniqueFormulaDetail = pFormulaDetails.stream() |
使用.stream()将列表转换成一个流
Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(PFormulaDetail::getCode)))
:使用
Collectors.toCollection
将Stream中的元素收集到一个集合中。- 在这里,集合的类型是
TreeSet
,它是有序的且不允许重复元素的集合。 - 通过传递一个
Comparator
,指定根据PFormulaDetail
对象的getCode
属性进行比较,从而实现自定义比较逻辑。
- 在这里,集合的类型是
Collectors.collectingAndThen(..., ArrayList::new)
:- 使用
Collectors.collectingAndThen
包装前面的收集器,它接受两个参数:前一个收集器和一个转换函数。 - 前一个收集器是去重的
TreeSet
,然后通过转换函数将其转换为ArrayList
,这样得到的ArrayList
就是去重后的pFormulaDetails
列表。
- 使用
Stream流中的filter方法
1 | Object comp = components.stream().filter(item -> { |
filter(item -> {...})
:使用filter
方法对流中的元素进行筛选,保留符合条件的元素。- 通过Lambda表达式,将
item
强制转换为JSONObject
,然
后检查其componentsId
属性是否与给定的materialCode
相等 。
- 通过Lambda表达式,将
findAny()
:返回流中的任意一个元素,如果流为空则返回空。由于使用了filter
进行了筛选,这里找到的元素就是符合条件的任意一个元素。orElse(null)
:如果找到符合条件的元素,返回该元素;如果没有找到,则返回null
compareTo()方法
1 | public int compareTo(BigDecimal val) |
这个方法返回一个整数值,其含义如下:
- 如果当前对象小于
val
,则返回负整数。 - 如果当前对象等于
val
,则返回零。 - 如果当前对象大于
val
,则返回正整数。
这样的比较是基于数值的大小而不是对象的引用。