<p>要一次循环获取对象中最大值和最小值的属性,可以使用stream的reduce方法结合Comparator来实现。</p>
<p>假设有一个对象列表List<Object> objects,其中每个对象都有一个属性值,可以按照以下步骤进行操作:</p>
<ol>
<li>
<p>创建一个Comparator对象,根据属性值进行比较。假设属性值的类型是Integer,可以这样创建Comparator:</p>
<pre><code class="language-java">Comparator&lt;Object&gt; comparator = Comparator.comparing(obj -&gt; ((Object) obj).getProperty());
</code></pre>
</li>
<li>
<p>使用stream的reduce方法,传入一个BinaryOperator来实现对每个对象的属性进行比较。在这个BinaryOperator中,可以使用Comparator的compare方法来比较属性值,并返回较大或较小的值。</p>
<pre><code class="language-java">Optional&lt;Object&gt; maxProperty = objects.stream()
        .reduce((obj1, obj2) -&gt; comparator.compare(obj1, obj2) &gt; 0 ? obj1 : obj2);
Optional&lt;Object&gt; minProperty = objects.stream()
        .reduce((obj1, obj2) -&gt; comparator.compare(obj1, obj2) &lt; 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&lt;Object&gt; objects = ...; // 初始化对象列表
        Comparator&lt;Object&gt; comparator = Comparator.comparing(obj -&gt; ((Object) obj).getProperty());

        Optional&lt;Object&gt; maxProperty = objects.stream()
                .reduce((obj1, obj2) -&gt; comparator.compare(obj1, obj2) &gt; 0 ? obj1 : obj2);
        Optional&lt;Object&gt; minProperty = objects.stream()
                .reduce((obj1, obj2) -&gt; comparator.compare(obj1, obj2) &lt; 0 ? obj1 : obj2);

        Object max = maxProperty.orElse(null);
        Object min = minProperty.orElse(null);

        // 打印最大和最小属性值的对象
        System.out.println(&quot;Max: &quot; + max);
        System.out.println(&quot;Min: &quot; + min);
    }
}
</code></pre>
<p>请注意,这里假设对象列表中的对象都有一个名为getProperty的方法来获取属性值。根据实际情况,你可能需要调整代码以适应你的对象结构和属性获取方式</p>
stream一次循环获取对象中最大值和最小值的属性

原文地址: http://www.cveoy.top/t/topic/hzu6 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录