我正在尝试在ArrayList
中搜索关键字,如果找到了关键字,则会打印ArrayList
中有多少“关键字”。但是我得到的印刷品是“找不到关键字”,无论关键字是什么,因为搜索方法无法正常工作。
以下是代码:
public ArrayList<Media> search(String keywordi)
{
keyword = keywordi;
System.out.println(keyword);
return (ArrayList<Media>) storage.stream()
.filter(m -> storage.contains(keyword))
.collect(Collectors.toList());
}
和
ArrayList<Media> result = (ArrayList<Media>) katalog.search("Tasty");
if(result.size()==0)
{
System.out.println("No keywords found.");
}
else
{
System.out.println(result.size()+" keywords found.");
}
答案 0 :(得分:1)
我想filter
调用应该是
filter(m -> m.contains(keyword))
但您的Media
课程没有contain
方法。
也许它应该是
filter(m -> m.beskrivning.contains(keyword))
答案 1 :(得分:0)
这对您的问题很有帮助:
List<Media> list = Arrays.asList(new Media("T"), new Media("Keyword"), new Media("Keyword"),
new Media("T"), new Media("Keyword"), new Media("Keyword"),
new Media("F"), new Media("T"), new Media("Keyword"));
String looking_for = "Keyword";
long count
= list.stream()
.filter(i -> i.getWord().equals(looking_for)).count();
System.out.println(count > 0 ? count + " keywords found" : "No keywords found");
假设您的Media
课程如下:
class Media {
private String word;
public String getWord() {
return word;
}
public void setWord(String word) {
this.word = word;
}
public Media(String word) {
this.word = word;
}
}
答案 2 :(得分:0)
您可能想要的方法是
public ArrayList<Media> search(String keywordi) {
return storage.stream()
.filter(media -> media.gettitel() != null ? media.gettitel().contains(keywordi) : false)
.collect(Collectors.toCollection(ArrayList::new));
}
或
public List<Media> search(String keywordi) {
return storage.stream() // => Stream<Media>
.filter(media -> media.gettitel() != null ? media.gettitel().contains(keywordi) : false)
.collect(Collectors.toList());
}
因为ArrayList
只是一个无关紧要的细节。通用List
接口通常更可取。
filter
通过调用Stream<Media>
方法应用于stream()
中的每个元素。它是一个boolean
函数,用于决定该元素是否应该在下一步中出现。如果一个简单的表达式还不够,你也可以定义一个完整的代码块来分析你得到的Media
元素:
public List<Media> search(String keywordi) {
return storage.stream()
.filter(media -> {
if (media.gettitel() != null && media.gettitel().contains(keywordi))
return true;
if (media.getMediatyp() != null && media.getMediatyp().contains(keywordi))
return true;
return false;
})
.collect(Collectors.toList());
}