【问题标题】:How to make for loop code block runs faster?如何使 for 循环代码块运行得更快?
【发布时间】:2020-12-20 20:03:53
【问题描述】:

这是一个twitter4j 依赖项。我正在获取用户的关注者数据。

以下代码需要将近 15 秒 才能完成获取 45 个用户 数据的数据。可以做些什么来使这段代码运行得更快?或者我应该粗略地添加我的项目有什么逻辑吗?

多线程?并发?

ArrayList<String> list = new ArrayList<String>();
int i = 0;
try {

    IDs ids = twitter.getFollowersIDs(-1);// ids

    do {
        for (long id : ids.getIDs()) {
            String location = twitter.showUser(id).getLocation();
            if(location.length() != 0) {
                list.add(location);
                System.out.println(location);
            }
            i++;
        }
    } while (ids.hasNext());

} catch (Exception e) {
    e.printStackTrace();
}

System.out.println(i);
return list;

【问题讨论】:

  • 并行性可能会有所帮助,是的。大概twitter.showUser 是一个阻塞调用,因此对于每个用户ID,您都在等待整个往返行程完成,然后再继续下一个。不是最优的
  • 也许您可以使用 lookupUsers (github.com/Twitter4J/Twitter4J/blob/…) 并运行结果。这可能会更快。

标签: java multithreading api twitter twitter4j


【解决方案1】:

您可以创建多个线程同时处理数据。

此外,如果 twitter 库支持流,您可以使用 parallelStream() 自动执行此操作。

类似:

IDs ids = twitter.getFollowersIDs(-1); // ids

List<String> locations = ids.getIDs().parallelStream()
    .map(twitter::showUser)
    .map(TwitterUserClass::getLocation)
    .filter(location -> location.length() != 0)
    .collect(Collection.asList());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-07
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 2022-12-14
    • 2022-11-02
    • 2012-12-11
    • 1970-01-01
    相关资源
    最近更新 更多