Java 方法引用和布尔值
因此,我一直在尝试在Java8(Object::method)中使用方法引用。我正在尝试做的是,我以前做过,但已经忘记了(上次我使用此方法参考是在大约4个月前),找到需要的玩家数量!=在线使用方法参考Java 方法引用和布尔值,java,java-8,Java,Java 8,因此,我一直在尝试在Java8(Object::method)中使用方法引用。我正在尝试做的是,我以前做过,但已经忘记了(上次我使用此方法参考是在大约4个月前),找到需要的玩家数量!=在线使用方法参考 public static Set<Friend> getOnlineFriends(UUID playerUUID) { Set<Friend> friends = new HashSet<>(Arrays.asList(ZMFriends.getFr
public static Set<Friend> getOnlineFriends(UUID playerUUID)
{
Set<Friend> friends = new HashSet<>(Arrays.asList(ZMFriends.getFriends(playerUUID)));
return friends.stream().filter(Friend::isOnline).collect(Collectors.toSet());
}
public static Set<Friend> getOfflineFriends(UUID playerUUID)
{
Set<Friend> friends = new HashSet<>(Arrays.asList(ZMFriends.getFriends(playerUUID)));
return friends.stream().filter(Friend::isOnline).collect(Collectors.toSet());
公共静态设置getOnlineFriends(UUID PlayerUID)
{
Set friends=newhashset(Arrays.asList(ZMFriends.getFriends(playeruid));
return friends.stream().filter(Friend::isOnline).collect(Collectors.toSet());
}
公共静态设置getOfflineFriends(UUID PlayerUID)
{
Set friends=newhashset(Arrays.asList(ZMFriends.getFriends(playeruid));
return friends.stream().filter(Friend::isOnline).collect(Collectors.toSet());
正如你所见,当玩家(朋友)在线时,我设法做到了这一点,但我不知道如何通过设置过滤并收集离线玩家。我遗漏了一些明显的东西,但这是什么
谢谢,
杜克。我可以想出两种方法:
friends.stream().filter(i->!i.isOnline()).collect(Collectors.toSet());
但我想这不是你想要的,因为它没有使用方法引用
公共静态谓词否定(谓词谓词){
返回谓词.negate();
}
...
friends.stream().filter(否定(Friend::isOnline)).collect(Collectors.toSet());
在您的代码中
public static Set<Friend> getOnlineFriends(UUID playerUUID)
{
Set<Friend> friends = new HashSet<>(Arrays.asList(ZMFriends.getFriends(playerUUID)));
return friends.stream().filter(Friend::isOnline).collect(Collectors.toSet());
}
进一步,在实际的实现中,你应该考虑是否真的需要两个代码,<代码> GETONLIVENTRONS < /C>和<代码> GETFRONION朋友< /Cord>。提前创建实用工具方法,仅仅因为你可能需要它们,很少有回报。
但是,如果您确实需要这两种操作,这仍然是不必要的代码重复。请考虑:
public static Set<Friend> getFriends(UUID playerUUID, boolean online)
{
return Arrays.stream(ZMFriends.getFriends(playerUUID))
.filter(f -> f.isOnline()==online).collect(Collectors.toSet());
}
这为您同时提供了Set
s,在线好友与true
关联,离线好友与false
关联,这称为方法引用,而不是范围运算符。@Eran,噢,亲爱的。我对此表示歉意,一次考虑两件事,却意外地放下了错误的东西!感谢您的支持或者friends.stream().filter(((谓词)friends::isOnline.negate()).collect(Collectors.toSet());
public static Set<Friend> getFriends(UUID playerUUID, boolean online)
{
return Arrays.stream(ZMFriends.getFriends(playerUUID))
.filter(f -> f.isOnline()==online).collect(Collectors.toSet());
}
public static Map<Boolean,Set<Friend>> getOnlineFriends(UUID playerUUID)
{
return Arrays.stream(ZMFriends.getFriends(playerUUID))
.collect(Collectors.partitioningBy(Friend::isOnline, Collectors.toSet()));
}