【问题标题】:Unable to get a response with Lambda Stream Filter [duplicate]无法使用 Lambda 流过滤器获得响应 [重复]
【发布时间】:2015-05-24 13:15:02
【问题描述】:

这是我遇到问题的流“airportFilteredList”,它应该打印与给定“Turkey”字符串的过滤器匹配的国家名称,但它不会在控制台上使用 count() 打印任何内容流给出的值为 0

public void getFilteredAirportList(String filteredText){

     System.out.println(filteredText); //returns Turkey    
     Predicate<Airport> filterCountry = u -> u.getCountry() == filteredText;
     Stream<Airport> airportFilteredList = airportList.stream().filter(filterCountry);
     airportFilteredList.forEach(u -> System.out.println(u.getCountry()));

}

我也从同一个列表中制作了一个没有过滤器的通用流,但它运行良好并返回机场的所有国家/地区名称。

public void getAirportList(){
    Stream <Airport> airportStream = airportList.stream();
    airportStream.forEach(u -> u.getCountry()); //returns Turkey
}

从中检索 Airport 对象的 ArrayList

ArrayList<Airport> airportList = new ArrayList<Airport>();

public void createAirport(String airport, String country, String continent,
        String airfield_length) {
    airportList.add(new Airport(airport, country, continent,
            airfield_length));

}

完整的源代码在https://github.com/Jointts/JavaExam/tree/master/JavaExam

【问题讨论】:

    标签: java filter java-stream


    【解决方案1】:

    在java中使用equals而不是==来比较String,因为==比较的是引用而不是值。

     Stream<Airport> airportFilteredList = airportList.stream().filter(
                u -> "Turkey".equals(u.getCountry()));
    

    【讨论】:

    • 感谢您的快速回答,为此苦苦挣扎了 4 个小时。 :)
    猜你喜欢
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 2018-06-12
    • 2019-04-27
    • 1970-01-01
    • 2021-08-19
    • 2016-11-05
    • 2014-06-06
    相关资源
    最近更新 更多