首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java 8 Stream get minimum

Java 8 Stream get minimum
EN

Stack Overflow用户
提问于 2018-03-04 09:52:36
回答 2查看 3K关注 0票数 5

我必须用流api.In写一个方法,这个方法我应该得到一个叫做"Winner“的对象中的整数值的最小值,我的意思是整数的值是Winner的值,我必须得到最小/最短的one.The类,如下所示

代码语言:javascript
复制
package U13_Lambdas_Streams.Streams;

import java.time.Duration;
import java.util.Arrays;
import java.util.List;

public class Winner {

    private int year;
    private String nationality;
    private String name;
    private String team;
    private int lengthKm;
    private Duration winningTime;
    private int stageWins;
    private int daysInYellow;

    public static final List<Winner> tdfWinners = Arrays.asList(
            new Winner(2006, "Spain", "Óscar Pereiro", "Caisse d'Epargne–
    Illes Balears", 3657, Duration.parse("PT89H40M27S"), 8),
            new Winner(2007, "Spain", "Alberto Contador", "Discovery 
    Channel", 3570, Duration.parse("PT91H00M26S"), 4),
            new Winner(2008, "Spain", "Carlos Sastre", "Team CSC", 3559, 
    Duration.parse("PT87H52M52S"), 5),
            new Winner(2009, "Spain", "Alberto Contador", "Astana", 3459, 
    Duration.parse("PT85H48M35S"), 7),
            new Winner(2010, "Luxembourg", "Andy Schleck", "Team Saxo Bank",
    3642, Duration.parse("PT91H59M27S"), 12),
            new Winner(2011, "Australia", "Cadel Evans", "BMC Racing Team", 
    3430, Duration.parse("PT86H12M22S"), 2),
            new Winner(2012, "Great Britain", "Bradley Wiggins", "Team Sky", 
    3496, Duration.parse("PT87H34M47S"), 14),
            new Winner(2013, "Great Britain", "Chris Froome", "Team Sky",
    3404, Duration.parse("PT83H56M20S"), 14),
            new Winner(2014, "Italy", "Vincenzo Nibali", "Astana", 3661, 
    Duration.parse("PT89H59M06S"), 19),
            new Winner(2015, "Great Britain", "Chris Froome", "Team Sky",
    3360, Duration.parse("PT84H46M14S"), 16),
            new Winner(2016, "Great Britain", "Chris Froome", "Team Sky",             
    3529, Duration.parse("PT89H04M48S"), 14)
    );


    public Winner(int year, String nationality, String name, String team, int
          lengthKm, Duration winningTime, int daysInYellow) {
        this.year = year;
        this.nationality = nationality;
        this.name = name;
        this.team = team;
        this.lengthKm = lengthKm;
        this.winningTime = winningTime;
        this.daysInYellow = daysInYellow;
    }

    public double getAveSpeed() {
        return (getLengthKm() / (getWinningTime().getSeconds() / 3600));
    }

    public int getYear() {
        return year;
    }

    public void setYear(int year) {
        this.year = year;
    }

    public String getNationality() {
        return nationality;
    }

    public void setNationality(String nationality) {
        this.nationality = nationality;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getTeam() {
        return team;
    }

    public void setTeam(String team) {
        this.team = team;
    }

    public int getLengthKm() {
        return lengthKm;
    }

    public void setLengthKm(int lengthKm) {
        this.lengthKm = lengthKm;
    }

    public Duration getWinningTime() {
        return winningTime;
    }

    public void setWinningTime(Duration winningTime) {
        this.winningTime = winningTime;
    }

    public int getStageWins() {
        return stageWins;
    }

    public void setStageWins(int stageWins) {
        this.stageWins = stageWins;
    }

    public int getDaysInYellow() {
        return daysInYellow;
    }

    public void setDaysInYellow(int daysInYellow) {
        this.daysInYellow = daysInYellow;
    }

    @Override
    public String toString() {
        return name;
    }
}

我试着收集以太,然后得到最小值。然而,它并没有按计划工作。这就是我现在有的东西你能帮上忙吗?

代码语言:javascript
复制
 private static int GetShortestTour() {
    List<Integer> values = Winner.tdfWinners.stream()
            .filter(winner -> winner.getLengthKm())
            .collect(Collectors.toList());
    return ;

我知道我不能返回任何东西,但我不知道如何从列表中获取最小值,或者如何直接返回。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-04 10:00:43

您似乎误用了Stream提供的方法,并且可能忘记了可以将其映射到IntStream,然后调用min返回OptionalInt

代码语言:javascript
复制
private static int getShortestTour() {
    return Winner.tdfWinnders
                 .stream()
                 .mapToInt(Winner::getLengthKm)
                 .min()
                 .orElse(Integer.MIN_VALUE);
}

如果没有找到最小值,则返回Integer.MIN_VALUE

票数 8
EN

Stack Overflow用户

发布于 2018-03-05 18:15:48

请在你的方法中使用下面的代码。

代码语言:javascript
复制
int min = tdfWinners.stream()
                    .mapToInt(k -> k.lengthKm)
                    .min()
                    .orElse(0);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49091154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档