2016-11-06 59 views
-2

任何人都可以帮助建议我做错了什么。我试图按年搜索一个类的对象,但是如果没有匹配,我想要一个语句打印出来,没有匹配,但它不能正常工作,即使找到了一年,也只是打印出来。预先感谢帮助java源代码类

//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"); 
    } 
+4

您需要记录是否有任何匹配,例如在一个'boolean'变量中,如果没有,打印出没有匹配。 –

回答

0

您可以使用从Java8流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"); 
} 
+0

谢谢你的回复:-) – americanheartbreak

+0

如果这有助于你可以给我一个upvote :-) – developer

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跟踪如果一年被发现。只有找不到,我们才打印“不匹配”。

+0

非常感谢你做了一个梦想 – americanheartbreak

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()); 
    } 
} 
+0

非常感谢你回复:-)伟大的学习一些新的东西 – americanheartbreak