收集器的四部分组成(供应商applier,累加器Accumulator,合并器combiner,终结器finisher)

1..map(Artist::getName)

使用map操作:作对流中的每个元素(这里是Artist对象)应用一个函数,这个函数是Artist类的getName方法,它返回艺术家的名字。

2.forEach(name -> { ... })

使用forEach操作对流中的每个元素(现在是艺术家的名字)执行一个给定的操作。这里的操作是一个lambda表达式,它检查一个名为builderStringBuilder对象的长度,如果长度大于1(意味着已经添加了一个或多个名字),就先追加一个逗号和一个空格", ",然后再追加当前的名字。如果builder是空的(即还没有添加任何名字),则直接追加名字。

3.}, (left, right) -> left.append(right));:这是reduce的第三个参数,一个BinaryOperator,用于并行执行时合并两个StringBuilder对象的结果。在这个例子中,它简单地将右侧的StringBuilder内容追加到左侧的StringBuilder。然而,由于这里的操作(拼接字符串)本质上是线性的,且StringBuilder本身不是线程安全的,这个合并函数在并行流中可能不会产生预期的结果,但在这个特定例子中,由于流是顺序处理的(没有显式地并行化),这个合并函数实际上不会被调用,

4.收集器的四部分组成

5. StringCombiner::add,:这是reduce的第二个参数,一个BiConsumer(在Java 8中,reduce方法的一个重载版本可以接受BiConsumer作为累加器,但更常见的是使用BinaryOperator。这里的StringCombiner::add可能是一个简化的表示,实际上可能需要一个适配器来将BiConsumer转换为BinaryOperator,或者StringCombiner类可能有一个特别的方法用于此目的。然而,为了解释的目的,我们可以假设StringCombiner::add是一个接受两个参数(在这里是艺术家的名字和当前的StringCombiner对象)并更新StringCombiner对象的方法。但请注意,这种解释可能不完全准确,因为标准的reduce方法不直接支持BiConsumer。在实际实现中,可能需要一个自定义的归约过程或使用其他方法,如collect,来实现类似的功能。

如何实现computeifabsent缓存?

“computeIfAbsent”是 Java 中的一个方法。这个方法通常用于在 Java 的 Map 接口的实现类中,当给定的键不存在或者对应的值为 null 时,通过给定的计算函数计算并设置该键的值。例如,如果有一个 Map<String, Integer> map,使用 map.computeIfAbsent("key", k -> 10),如果“key”这个键不存在于 map 中,那么就会将“key”添加到 map 中,并将值设置为 10。如果“key”已经存在且值不为 null,则不进行任何操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值