首页 > 解决方案 > 根据条件从ArrayList中获取n个随机元素,并从原始列表中移除

问题描述

拿一个列表:List<MyObject> objects = new ArrayList<>();,其中每个MyObject都有一个字段String myString;

如何从列表中“弹出”(检索和删除)n 随机元素myString == "myString"

编辑:

我已经成功地从列表中删除了一个随机元素,我可以对其进行n多次迭代,但这似乎效率很低。在我的代码中也没有比较方面。

List<MyObject> objects = new ArrayList<>();
MyObject object = objects.get(Math.random() * objects.size());
objects.remove(object);

标签: javaarraysarraylist

解决方案


 List<MyObject> filtered = objects.stream()
            .filter(o -> o.getMyString().equals("myString"))
            .collect(Collectors.toList());

Collections.shuffle(filtered);
List randomList = filtered.subList(0, n);
objects.removeAll(randomList);

推荐阅读