Created
May 30, 2015 11:02
-
-
Save orekyuu/82c92e2218c774f1df13 to your computer and use it in GitHub Desktop.
ラムダと匿名クラスで挙動変わる
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package net.orekyuu.javatter.core.controller; | |
import javafx.fxml.Initializable; | |
import javafx.scene.control.Hyperlink; | |
import javafx.scene.text.Text; | |
import net.orekyuu.javatter.api.twitter.model.Tweet; | |
import net.orekyuu.javatter.api.twitter.userstream.events.OnStatus; | |
import net.orekyuu.javatter.core.service.TwitterUserServiceImpl; | |
import net.orekyuu.javatter.core.twitter.TwitterUserImpl; | |
import java.awt.*; | |
import java.io.IOException; | |
import java.net.URISyntaxException; | |
import java.net.URL; | |
import java.util.ResourceBundle; | |
public class AboutController implements Initializable { | |
public Text version; | |
public Text release; | |
public Text jreInfo; | |
public Hyperlink webSiteLink; | |
public Text apiVersion; | |
private OnStatus onStatus = new OnStatus() { | |
@Override | |
public void onStatus(Tweet tweet) { | |
System.out.println("about: " + tweet.getText()); | |
} | |
}; | |
@Override | |
public void initialize(URL location, ResourceBundle resources) { | |
version.setText(String.format("JavaBeamStudio %s", "0.0.1")); | |
apiVersion.setText(String.format("JavaBeamStudioAPI %s", "0.0.1")); | |
release.setText(String.format("Release %d/%d/%d", 2015, 5, 29)); | |
webSiteLink.setOnMouseClicked(e -> { | |
try { | |
Desktop.getDesktop() | |
.browse(new URL(webSiteLink.getText()).toURI()); | |
} catch (IOException | URISyntaxException e1) { | |
e1.printStackTrace(); | |
} | |
}); | |
jreInfo.setText(String.format("%s %s", System.getProperty("java.runtime.name"), System.getProperty("java.runtime.version"))); | |
//TODO test code | |
TwitterUserServiceImpl service = new TwitterUserServiceImpl(); | |
service.selectedAccount().ifPresent(twitterUser -> twitterUser.userStream().onStatus(new OnStatus() { | |
@Override | |
public void onStatus(Tweet tweet) { | |
System.out.println("匿名クラス: " + tweet.getText()); | |
} | |
})); | |
service.selectedAccount().ifPresent(twitterUser -> twitterUser.userStream().onStatus(tweet -> System.out.println("ラムダ: " + tweet.getText()))); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package net.orekyuu.javatter.core.twitter.userstream; | |
import com.gs.collections.api.list.MutableList; | |
import com.gs.collections.impl.factory.Lists; | |
import net.orekyuu.javatter.api.twitter.model.Tweet; | |
import net.orekyuu.javatter.api.twitter.userstream.UserStream; | |
import net.orekyuu.javatter.api.twitter.userstream.events.*; | |
import java.lang.ref.Reference; | |
import java.lang.ref.WeakReference; | |
import java.util.function.Consumer; | |
import java.util.function.Predicate; | |
public class UserStreamImpl implements UserStream { | |
private MutableList<WeakReference<OnStatus>> onStatusListeners = Lists.mutable.of(); | |
private MutableList<WeakReference<OnException>> onExceptionListeners = Lists.mutable.of(); | |
private MutableList<WeakReference<OnUserProfileUpdate>> onUserProfileUpdateListeners = Lists.mutable.of(); | |
private MutableList<WeakReference<OnBlock>> onBlockListeners = Lists.mutable.of(); | |
private MutableList<WeakReference<OnFavorite>> onFavoriteListeners = Lists.mutable.of(); | |
private MutableList<WeakReference<OnFollow>> onFollowListeners = Lists.mutable.of(); | |
private MutableList<WeakReference<OnUnblock>> onUnblockListeners = Lists.mutable.of(); | |
private MutableList<WeakReference<OnUnfavorite>> onUnfavoriteListeners = Lists.mutable.of(); | |
private MutableList<WeakReference<OnUnfollow>> onUnfollowListeners = Lists.mutable.of(); | |
/** | |
* 参照が切れたものをListから削除してリスナを登録する | |
* @param listener リスナ | |
* @param list リスト | |
* @param <T> リスナの型 | |
*/ | |
private <T> void addListener(T listener, MutableList<WeakReference<T>> list) { | |
list.removeIf((Predicate<WeakReference<T>>) ref -> ref.get() == null); | |
list.add(new WeakReference<>(listener)); | |
} | |
@Override | |
public UserStream onStatus(OnStatus onStatus) { | |
addListener(onStatus, onStatusListeners); | |
return this; | |
} | |
@Override | |
public UserStream onException(OnException onException) { | |
addListener(onException, onExceptionListeners); | |
return this; | |
} | |
@Override | |
public UserStream onUserProfileUpdate(OnUserProfileUpdate onUserProfileUpdate) { | |
addListener(onUserProfileUpdate, onUserProfileUpdateListeners); | |
return this; | |
} | |
@Override | |
public UserStream onBlock(OnBlock onBlock) { | |
addListener(onBlock, onBlockListeners); | |
return this; | |
} | |
@Override | |
public UserStream onFavorite(OnFavorite onFavorite) { | |
addListener(onFavorite, onFavoriteListeners); | |
return this; | |
} | |
@Override | |
public UserStream onFollow(OnFollow onFollow) { | |
addListener(onFollow, onFollowListeners); | |
return this; | |
} | |
@Override | |
public UserStream onUnblock(OnUnblock onUnblock) { | |
addListener(onUnblock, onUnblockListeners); | |
return this; | |
} | |
@Override | |
public UserStream onUnfollow(OnUnfollow onUnfollow) { | |
addListener(onUnfollow, onUnfollowListeners); | |
return this; | |
} | |
@Override | |
public UserStream onUnfavorite(OnUnfavorite onUnfavorite) { | |
addListener(onUnfavorite, onUnfavoriteListeners); | |
return this; | |
} | |
@Override | |
public UserStream onDirectMessage(OnDirectMessage onDirectMessage) { | |
//TODO 後で実装 | |
return this; | |
} | |
@Override | |
public UserStream onUserListUpdate(OnUserListUpdate onUserListUpdate) { | |
//TODO 後で実装 | |
return this; | |
} | |
@Override | |
public UserStream onUserListSubscription(OnUserListSubscription onUserListSubscription) { | |
//TODO 後で実装 | |
return this; | |
} | |
@Override | |
public UserStream onUserListUnsubscription(OnUserListUnsubscription onUserListUnsubscription) { | |
//TODO 後で実装 | |
return this; | |
} | |
@Override | |
public UserStream onUserListMemberAddition(OnUserListMemberAddition onUserListMemberAddition) { | |
//TODO 後で実装 | |
return this; | |
} | |
@Override | |
public UserStream onUserListMemberDeletion(OnUserListMemberDeletion onUserListMemberDeletion) { | |
//TODO 後で実装 | |
return this; | |
} | |
@Override | |
public UserStream onUserListDeletion(OnUserListDeletion onUserListDeletion) { | |
//TODO 後で実装 | |
return this; | |
} | |
@Override | |
public UserStream onUserListCreation(OnUserListCreation onUserListCreation) { | |
//TODO 後で実装 | |
return this; | |
} | |
//=========================================== | |
public void callStatus(Tweet tweet) { | |
onStatusListeners.collect(Reference::get) | |
.select(listener -> listener != null) | |
.forEach((Consumer<OnStatus>) listener -> listener.onStatus(tweet)); | |
} | |
public void callException(Exception e) { | |
onExceptionListeners.collect(Reference::get) | |
.select(listener -> listener != null) | |
.forEach((Consumer<OnException>) listener -> listener.onException(e)); | |
} | |
public void callUserProfileUpdate(OnUserProfileUpdate onUserProfileUpdate) { | |
addListener(onUserProfileUpdate, onUserProfileUpdateListeners); | |
} | |
public void callBlock(OnBlock onBlock) { | |
addListener(onBlock, onBlockListeners); | |
} | |
public void callFavorite(OnFavorite onFavorite) { | |
addListener(onFavorite, onFavoriteListeners); | |
} | |
public void callFollow(OnFollow onFollow) { | |
addListener(onFollow, onFollowListeners); | |
} | |
public void callUnblock(OnUnblock onUnblock) { | |
addListener(onUnblock, onUnblockListeners); | |
} | |
public void callUnfollow(OnUnfollow onUnfollow) { | |
addListener(onUnfollow, onUnfollowListeners); | |
} | |
public void callUnfavorite(OnUnfavorite onUnfavorite) { | |
addListener(onUnfavorite, onUnfavoriteListeners); | |
} | |
public void callDirectMessage(OnDirectMessage onDirectMessage) { | |
//TODO 後で実装 | |
} | |
public void callUserListUpdate(OnUserListUpdate onUserListUpdate) { | |
//TODO 後で実装 | |
} | |
public void callUserListSubscription(OnUserListSubscription onUserListSubscription) { | |
//TODO 後で実装 | |
} | |
public void callUserListUnsubscription(OnUserListUnsubscription onUserListUnsubscription) { | |
//TODO 後で実装 | |
} | |
public void callUserListMemberAddition(OnUserListMemberAddition onUserListMemberAddition) { | |
//TODO 後で実装 | |
} | |
public void callUserListMemberDeletion(OnUserListMemberDeletion onUserListMemberDeletion) { | |
//TODO 後で実装 | |
} | |
public void callUserListDeletion(OnUserListDeletion onUserListDeletion) { | |
//TODO 後で実装 | |
} | |
public void callUserListCreation(OnUserListCreation onUserListCreation) { | |
//TODO 後で実装 | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment