Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 方法引用和布尔值_Java_Java 8 - Fatal编程技术网

Java 方法引用和布尔值

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

因此,我一直在尝试在Java8(Object::method)中使用方法引用。我正在尝试做的是,我以前做过,但已经忘记了(上次我使用此方法参考是在大约4个月前),找到需要的玩家数量!=在线使用方法参考

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()));
}