stream一次循环获取对象中最大值和最小值的属性
<p>要一次循环获取对象中最大值和最小值的属性,可以使用stream的reduce方法结合Comparator来实现。</p>
<p>假设有一个对象列表List<Object> objects,其中每个对象都有一个属性值,可以按照以下步骤进行操作:</p>
<ol>
<li>
<p>创建一个Comparator对象,根据属性值进行比较。假设属性值的类型是Integer,可以这样创建Comparator:</p>
<pre><code class="language-java">Comparator<Object> comparator = Comparator.comparing(obj -> ((Object) obj).getProperty());
</code></pre>
</li>
<li>
<p>使用stream的reduce方法,传入一个BinaryOperator来实现对每个对象的属性进行比较。在这个BinaryOperator中,可以使用Comparator的compare方法来比较属性值,并返回较大或较小的值。</p>
<pre><code class="language-java">Optional<Object> maxProperty = objects.stream()
.reduce((obj1, obj2) -> comparator.compare(obj1, obj2) > 0 ? obj1 : obj2);
Optional<Object> minProperty = objects.stream()
.reduce((obj1, obj2) -> comparator.compare(obj1, obj2) < 0 ? obj1 : obj2);
</code></pre>
</li>
<li>
<p>最后,可以使用Optional类的get方法获取最大和最小属性值的对象,或者使用orElse方法指定默认值,以防止列表为空时抛出NoSuchElementException异常。</p>
<pre><code class="language-java">Object max = maxProperty.orElse(null);
Object min = minProperty.orElse(null);
</code></pre>
</li>
</ol>
<p>整个代码示例如下:</p>
<pre><code class="language-java">import java.util.Comparator;
import java.util.List;
import java.util.Optional;
public class Main {
public static void main(String[] args) {
List<Object> objects = ...; // 初始化对象列表
Comparator<Object> comparator = Comparator.comparing(obj -> ((Object) obj).getProperty());
Optional<Object> maxProperty = objects.stream()
.reduce((obj1, obj2) -> comparator.compare(obj1, obj2) > 0 ? obj1 : obj2);
Optional<Object> minProperty = objects.stream()
.reduce((obj1, obj2) -> comparator.compare(obj1, obj2) < 0 ? obj1 : obj2);
Object max = maxProperty.orElse(null);
Object min = minProperty.orElse(null);
// 打印最大和最小属性值的对象
System.out.println("Max: " + max);
System.out.println("Min: " + min);
}
}
</code></pre>
<p>请注意,这里假设对象列表中的对象都有一个名为getProperty的方法来获取属性值。根据实际情况,你可能需要调整代码以适应你的对象结构和属性获取方式</p>
原文地址: http://www.cveoy.top/t/topic/hzu6 著作权归作者所有。请勿转载和采集!