小编Ari*_*nen的帖子

是否有一种更优雅的方法来使用java 8从列表中获取随机未使用的项目?

要重构的功能......

<T> T notUsedRandomItem(List<T> allItems, List<T> usedItems) {
    return allItems.stream()
            .filter(item -> !usedItems.contains(item))
            .sorted((o1, o2) -> new Random().nextInt(2) - 1)
            .findFirst()
            .orElseThrow(() -> new RuntimeException("Did not find item!"));
}
Run Code Online (Sandbox Code Playgroud)

功能可能会像这样使用......

System.out.println(
            notUsedRandomItem(
                    Arrays.asList(1, 2, 3, 4), 
                    Arrays.asList(1, 2)
            )
    ); // Should print either 3 or 4
Run Code Online (Sandbox Code Playgroud)

编辑:通过针对人员列表运行它们来收集建议的实现和测试效率.

edit2:为Person类添加了缺少的equals方法.

import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.function.BiFunction;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

import static java.util.stream.Collectors.toList;

class Functions {

    <T> T notUsedRandomItemOriginal(List<T> allItems, List<T> usedItems) {
        return allItems.stream()
                .filter(item -> !usedItems.contains(item))
                .sorted((o1, o2) -> …
Run Code Online (Sandbox Code Playgroud)

java java-stream

8
推荐指数
1
解决办法
165
查看次数

标签 统计

java ×1

java-stream ×1