Twitter4jで片想い管理
7/1 id:crimsonwoodsさんの指摘を受けて修正
タイトルの通りです。
片想い管理しようとしてもなかなかどうもうまい方法が見つからなかったので、備忘録としての意味も込めて。
private HashSet<String> follower = new HashSet<String>(); private void getFollowers(Twitter tw) { try { IDs followers = tw.getFollowersIDs(tw.getId(), -1); long[] followerIDs = followers.getIDs(); for (int i=0; i<followerIDs.length; i++) { follower.add(String.valueOf(followerIDs[i])); } } catch (IllegalStateException e) { e.printStackTrace(); } catch (TwitterException te) { te.printStackTrace(); } }
流れ:
1.followerという名前のHashSetを作るHashMapを作る(はっきり言って。
2.getFollowerIDsでフォロワーの一覧を取得。
3.getIDsでID(ScreenNameではなく、数字で構成されるID)を取得。
4.HashSetにIDを追加しまくる(さっき言った通り値の"true"は使わない)。
こういうメソッド作って最初に呼び出して、つぶやきが飛んできたときに
follower.contains(String.valueOf(status.getUser().getId()));
trueなら両想い、falseなら片想いという感じで判定可能です。
流れの1.を見て普通の配列でもいいじゃないか!と思った方、鋭いです。
でも普通の配列を使うと、片想いかどうか判定するときに、最悪、配列の要素数だけループする必要が出てきてしまいます。
これはとても効率が悪い(と思う)ので、どうしてもHashSetにIDを持ってきたく、このような実装になりました。
今思うとキーの方をString型にする必要はあったんでしょうか…
相変わらず僕のすることはよく分からないですねw ロクにテストもしてませんし…。
ツッコみ大歓迎ですので、「ここおかしいよ!」というところがあったらぜひ教えてください。