【问题标题】:java 8 syntax conversion for processing 2 (twitter4j)处理 2 (twitter4j) 的 java 8 语法转换
【发布时间】:2016-03-16 05:07:02
【问题描述】:

我被告知此代码在处理中不起作用,因为它是 java 8 语法,在处理中不受支持。我需要帮助将其转换为处理中的工作。 Processing 2 可以处理什么语法?有没有办法将 java 8 语法转换为在 Processing 2 中工作?

public static void main (String args[]) throws TwitterException {
    Twitter twitter = new TwitterFactory().getInstance();
    List<Status> statuses = twitter.getUserTimeline("google");
    String hashtag = "#AlphaGo";
    System.out.println("The Twitter page contains " 
                        + countTweets(hashtag, statuses) 
                        + " tweets with the hashtag : " + hashtag);

}

public static int countTweets(String hashtag, List<Status> statuses){
    return (int) statuses.stream()
                         .filter(x -> x.getText().contains(hashtag))
                         .count();
}

由于我在声明变量时遇到问题: 当前版本

ConfigurationBuilder cb = new ConfigurationBuilder();
Twitter twitterInstance;
Query queryForTwitter;
ArrayList<Status> tweets = new ArrayList<Status>();

//ArrayList tweets;

void setup() {
  cb.setOAuthConsumerKey("xxx");
  cb.setOAuthConsumerSecret("xxx");
  cb.setOAuthAccessToken("xxx");
  cb.setOAuthAccessTokenSecret("xxx");
  cb.setUseSSL(true);

  size(640,440);

int countTweets(ArrayList<Status> statuses, String hashtag){
  int total = 0;
  for(Status tweet : statuses){
    if(tweet.getText().contains(hashtag)){
      total++;
    }
  }
  return total;
}

   int numGood = 50;
   int numBad = 50;
  for (int i = 0; i < numGood; i++) {
    tweets.add("#good");
  }
  for (int i = 0; i < numBad; i++) {
    tweets.add("#bad");
  }

} //setup

//create a function that counts the tweets
//that contain a certain hashtag
int countTweets(String hashtag){
  int total = 0;
  for(String tweet : tweets){
    if(tweet.contains(hashtag)){
      total++;
    }
  }
  return total;
}

void draw(){

  //count the good and bad tweets
  int goodTweets = countTweets("#good");
  int badTweets = countTweets("#bad");

  //calculate color based on tweet counts
  float r = badTweets/100.0 * 255;
  float g = goodTweets/100.0 * 255;
  float b = 0;

  background(r, g, b);

}

【问题讨论】:

  • 如果 Processing 可以加载外部 JAR 并编译为 Java 8,为什么不导入包含此代码的 JAR?
  • 这就是我为 twitter4j 库所做的。我对编程还是很陌生。你能指出我足够的 JAR 的方向吗? @Makoto

标签: java java-8 processing twitter4j


【解决方案1】:

this post 中,我向您展示了在没有 Java 8 语法的情况下执行此操作的语法:

int countTweets(ArrayList<String> statuses, String hashtag){
  int total = 0;
  for(String tweet : statuses){
    if(tweet.contains(hashtag)){
      total++;
    }
  }
  return total;
}

您可能会遇到困难,因为我的示例使用了 String 值而不是 Status 值。您必须将 Status 实例转换为 String 值:

int countTweets(ArrayList<Status> statuses, String hashtag){
  int total = 0;
  for(Status tweet : statuses){
    if(tweet.getText().contains(hashtag)){
      total++;
    }
  }
  return total;
}

【讨论】:

  • 这几周你真的是我的救星;我怎么强调都不过分。我不敢相信将字符串转换为状态如此简单。我在上面添加了您的修改,但仍然出现 int 错误。我认为这是由于缺少声明的变量。我需要声明什么,我只是声明ArrayList&lt;Status&gt; tweets = new ArrayList&lt;Status&gt;();我在我们说话时添加我当前的版本@kevin-workman
  • @zack.gray.ou 没问题。如果您针对任何后续问题发布一个单独的问题,您可能会有更好的运气,但看起来您正在声明一个函数 inside setup() 函数。这不是有效的语法。更一般地说,现在你有 两个 countTweets() 函数——你真的需要它们吗?请注意,您在此处获得的任何代码都将用作示例,因此您不能期望只复制粘贴答案并让它们自动工作 - 关键是了解这些答案在做什么然后用你自己的代码来做。
【解决方案2】:

你可以使用一个简单的循环和一个计数器

public static int countTweets (String hashtag, List<Status> statuses) {
    int counter = 0;
    for (int i = 0 ; i < statuses.size() ; i++) {
        if (statuses.get(i).getText().contains(hashtag)) counter++;
    }
    return counter;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-01
    • 2019-09-15
    • 1970-01-01
    • 2016-07-06
    • 2016-06-07
    • 1970-01-01
    • 2019-01-19
    • 2016-09-23
    相关资源
    最近更新 更多