Java实现从指定List中随机抽取3-5个单词生成组合字符串的方法
实现方案
首先建议先把你的列表定义改成带泛型的写法,避免后续类型转换报错:
List<String> list = new ArrayList<>(); list.add("up"); list.add("down"); list.add("fail"); list.add("success"); list.add("good"); list.add("bad"); list.add("upper"); list.add("uber");
以下按两种常见使用场景给出实现代码:
场景1:允许重复选取同一个单词
import java.util.Random; // 随机生成本次选取的单词数量:范围3~5 Random random = new Random(); int count = random.nextInt(3) + 3; // nextInt(3)返回0/1/2,加3后刚好覆盖3/4/5 StringBuilder sb = new StringBuilder(); for (int i = 0; i < count; i++) { // 随机生成列表范围内的索引 int randomIndex = random.nextInt(list.size()); sb.append(list.get(randomIndex)); // 单词之间用空格分隔 if (i != count - 1) { sb.append(" "); } } String headline = sb.toString();
Java 8及以上版本可以用流简化写法:
Random random = new Random(); int count = random.nextInt(3) + 3; String headline = random.ints(count, 0, list.size()) .mapToObj(list::get) .reduce((a, b) -> a + " " + b) .orElse("");
场景2:不允许重复选取同一个单词
用Collections.shuffle()打乱列表顺序后取前N个即可:
import java.util.Collections; import java.util.Random; import java.util.stream.Collectors; Random random = new Random(); int count = random.nextInt(3) + 3; // 先拷贝原列表再打乱,避免修改原列表顺序 List<String> tempList = new ArrayList<>(list); Collections.shuffle(tempList); // 取前count个单词拼接 String headline = tempList.subList(0, count) .stream() .collect(Collectors.joining(" "));
内容的提问来源于stack exchange,提问作者maede
相关产品推荐
相关产品推荐

