长话短说,我从here解析了所有json 到对象列表中。但我在寻找特定对象时遇到了困难。通过在线搜索列表上的所有示例,我似乎无法得到它。
我要求用户在 int checkId 和 checkUserId 中输入一个数字,然后进行比较。如果匹配,它应该打印出标题。
Iterator < Post > iter = posts.iterator();
while (iter.hasNext()) {
if (Objects.equals(iter.next().getUserId(), checkUserId)) {
System.out.println("found UserId");
if (Objects.equals(iter.next().getId(), checkId)) {
System.out.println("found Id");
//prints the title of object
}
}
}
然后我尝试使用流
List<Post> result = posts.stream()
.filter(title -> checkId.equals(getId()))
.findAny()
.orElse(null);
我从这个伟大的家伙那里克隆了所有代码。 https://github.com/danvega/httpclient-tutorial
您的第一次尝试不起作用,因为您通过调用
next
在每次迭代中将迭代器推进两次。相反,存储 Iterator#next
的结果并使用它。
Iterator<Post> iter = posts.iterator();
while(iter.hasNext()){
Post post = iter.next();
if(Objects.equals(post.getUserId(), checkUserId)) {
System.out.println("found UserId");
System.out.println(post.getTitle());
}
}
有流:
List<String> titles = posts.stream().filter(post-> checkId.equals(post.getId()))
.map(Post::getTitle).collect(Collectors.toList());
titles.forEach(System.out::println);
由于
posts
是 List
并且这是一个简单的迭代,我建议在基于迭代器的 while 循环上使用 for-each 循环:
for (Post post : posts) {
if (Objects.equals(post.getUserId(), checkUserId)
&& Objects.equals(post.getId(), checkId)) {
System.out.println(post.getTitle());
}
}
(为了完整性:如另一个答案中所述,基于迭代器的方法的问题是每次循环迭代多次调用
iter.next()
,而不是每次迭代仅调用一次)。