java 取最小值_获得Java 8流的最小和最大值的简明方法

如果这是一个经常需要的功能,我们最好让收藏家做这个工作.我们需要一个Stats类来保持count,min,max和factory方法来创建统计数据收集器.

Stats stats = stringStream.collect(Stats.collector())

fooStream.collect(Stats.collector(fooComparator))

(也许更好的方便方法是Stats.collect(stream))

我举了一个例子Stats class –

public class Stats

{

int count;

final Comparator super T> comparator;

T min;

T max;

public Stats(Comparator super T> comparator)

{

this.comparator = comparator;

}

public int count(){ return count; }

public T min(){ return min; }

public T max(){ return max; }

public void accept(T val)

{

if(count==0)

min = max = val;

else if(comparator.compare(val,min)<0)

min = val;

else if(comparator.compare(val,max)>0)

max = val;

count++;

}

public Stats combine(Stats that)

{

if(this.count==0) return that;

if(that.count==0) return this;

this.count += that.count;

if(comparator.compare(that.min,this.min)<0)

this.min = that.min;

if(comparator.compare(that.max,this.max)>0)

this.max = that.max;

return this;

}

public static Collector,Stats> collector(Comparator super T> comparator)

{

return Collector.of(

()->new Stats<>(comparator),Stats::accept,Stats::combine,Collector.Characteristics.UNORDERED,Collector.Characteristics.IDENTITY_FINISH

);

}

public static > Collector> collector()

{

return collector(Comparator.naturalOrder());

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值