【问题标题】:How do I find in Java a specific element, for printing, in a list of objects with multiple elements?如何在 Java 中在具有多个元素的对象列表中找到用于打印的特定元素?
【发布时间】:2021-10-09 01:23:06
【问题描述】:

长话短说我解析了来自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

【问题讨论】:

  • iter.next()保存在一个变量中,不要调用两次,每次调用都会移动光标!

标签: java json list stream iterator


【解决方案1】:

您的第一次尝试不起作用,因为您通过调用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);

【讨论】:

  • 谢谢。这让我发疯了好几个小时。
  • @TerryLight 很高兴为您提供帮助。
  • 在您的帮助下,我发现这也可行。 ``` for (Post post : posts) { if ((Objects.equals(post.getUserId(), checkUserId))&& (Objects.equals(post.getId(), checkId))) { System.out.println( “找到用户ID”); System.out.println(post.getTitle()); } } ```
猜你喜欢
  • 2012-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-25
  • 1970-01-01
  • 1970-01-01
  • 2020-09-27
  • 1970-01-01
相关资源
最近更新 更多