流最小不工作有时返回最大值而不是最小值

import java.util.ArrayList;import java.util.Comparator;import java.util.List;import java.util.Optional;public class GetMiles {
    public static void main(String args[]) {
        List<Student> studentList = new ArrayList<>();
        Student s = new Student();
        s.setFee("12000");
        studentList.add(s);
        Student s1 = new Student();
        s1.setFee("3000");
        studentList.add(s1);
        Optional<Student> optionalStudent = 
    studentList.stream().min(Comparator.comparing(Student::getFee));
        if (optionalStudent.isPresent()) {
            System.out.println(optionalStudent.get().getFee());
        }
    }static class Student {
        private String fee;
        public String getFee() {
            return this.fee;
        }
        public void setFee(String fee) {
            this.fee = fee;
        }
    }
   }

在上面的例子中它应该返回3000但是返回12000如果我们将给2000和3000它将返回2000也在大多数情况下它的工作正常但不是全部。


白衣染霜花
浏览 614回答 5
5回答

哈士奇WWW

将映射解析为列表中的int,然后像下面的示例代码一样获得最小费用:Optional<Integer>&nbsp;optionalVal&nbsp;=&nbsp;studentList.stream().map(l&nbsp;->&nbsp;Integer.parseInt(l.getFee())).min(Comparator.comparingInt(k&nbsp;->&nbsp;k)); if(optionalVal.isPresent())&nbsp;{String&nbsp;minFee&nbsp;=&nbsp;String.valueOf(optionalVal.get()); &nbsp;&nbsp;&nbsp;Optional<Student>&nbsp;studentObj&nbsp;=&nbsp;studentList.stream().filter(p&nbsp;->&nbsp; &nbsp;&nbsp;&nbsp;minFee.equals(p.getFee())).findFirst();}

慕哥9229398

那是因为你使用的是String,但正如你所指定的那样,这是一个要求。所以你必须以这种方式改变流:OptionalInt&nbsp;min&nbsp;=&nbsp;studentList.stream() &nbsp;&nbsp;&nbsp;&nbsp;.map(Student::getFee) &nbsp;&nbsp;&nbsp;&nbsp;.mapToInt(Integer::parseInt) &nbsp;&nbsp;&nbsp;&nbsp;.min();通过这种方式,您将String转换为Int,然后您将获取最小值。如果您的值有小数,请mapToDouble改用

缥缈止盈

这是因为你将它与它进行比较String。更改fee到Integer或Long类型。

慕莱坞森

你正在比较String而不是Integer。您可以通过提供一个解决这个问题Comparator是解析String到一个Integer(或者double,如果你喜欢):Optional<Student>&nbsp;opt&nbsp;=&nbsp;studentList&nbsp;&nbsp;&nbsp;&nbsp;.stream() &nbsp;&nbsp;&nbsp;&nbsp;.min(Comparator.comparing(stud&nbsp;->&nbsp;Integer.parseInt(stud.getFee())));

小怪兽爱吃肉

您正在比较String值,您应该比较数值以获得预期结果,如doubles或ints。改变你的类型fee字段Double,Long或Integer。比较字符串逐个字母,所以比较3000和12000使3000显得更大,因为第一个字母比较3>&nbsp;1。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java