list stream 最大和最小值_Java Stream:找到具有属性的最小值/最大值的元素

这是一个减少的问题。将列表降至特定值。总的来说,减少工作在部分解决方案和列表中的项目上。在这种情况下,这意味着将之前的“获胜”值与列表中的新值进行比较,这将在每次比较中计算两次昂贵的操作。

自定义consumer类将允许跟踪昂贵的操作,因为它减少了列表。消费者可以通过处理可变状态来绕过多次调用昂贵的计算。

class Cooler implements Consumer{

String coolestString = "";

int coolestValue = 0;

public String coolest(){

return coolestString;

}

@Override

public void accept(String arg0) {

combine(arg0, expensive(arg0));

}

private void combine (String other, int exp){

if (coolestValue < exp){

coolestString = other;

coolestValue = exp;

}

}

public void combine(Cooler other){

combine(other.coolestString, other.coolestValue);

}

}

该类接受一个字符串,如果它是比以前的赢家冷却器,它取代了它,并节省了昂贵的计算值。

Cooler cooler = Stream.of("java", "php", "clojure", "c", "lisp")

.collect(Cooler::new, Cooler::accept, Cooler::combine);

System.out.println(cooler.coolest());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值