java源代码类

时间:2016-11-06 17:34:36

标签: java class

任何人都可以帮忙建议我做错了什么。我试图按年份搜索一个类的对象,但如果没有匹配,我想要一个声明打印出没有匹配但它不起作用它只是打印出来,即使找到了年份。在此先感谢您的帮助

   //search by year 

    public void searchByYear(int year){
        for(Book s : books){
            if(s.getYear()==year){
                System.out.println(s.toString());
            }
        }System.out.println("No match");
    }

3 个答案:

答案 0 :(得分:2)

试试这个:

public void searchByYear(int year){
    boolean foundAny = false;
    for(Book s : books){
        if(s.getYear()==year){
            foundAny = true;
            System.out.println(s.toString());
        }
    }
    if (!foundAny) {
        System.out.println("No match");
    }
}

我们使用布尔变量foundAny来跟踪是否找到了一年。只有在找不到时才会打印“不匹配”。

答案 1 :(得分:0)

另一种解决方案:

final List<Book> matches = new ArrayList<>();
for (Book s : books) {
    if (s.getYear() == year) {
        matches.add(s);
    }
}

if (matches.isEmpty()) {
    System.out.println("No match");
} else {
    for (Book s : matches) {
        System.out.println(s.toString());
    }
}

答案 2 :(得分:0)

您可以使用Java8 Streams中的noneMatch()并执行以下操作:

if(list.stream().map(Book::getYear).noneMatch(( matchyear -> matchyear == year))) {
  System.out.println("No match");
}

没有Java8:

boolean isFound = false;
for(Book s : books){
    if(s.getYear()==year){
      isFound = true;
    }
}
if(!isFound) {
   System.out.println("No match");
}