gpt4 book ai didi

java - FizzBu​​zz 号码分组

转载 作者:搜寻专家 更新时间:2023-11-01 02:00:43 24 4
gpt4 key购买 nike

我正在尝试用 Java8 编写 FizzBu​​zz 问题。它工作正常,我得到了想要的输出。对于能被“3”整除的数字,它应该返回“Fizz”,对于能被“5”整除的数字,它应该返回“Buzz”,对于能被两者整除的数字,它应该返回“FizzBu​​zz”。

如果我将值作为“15”传递,它会返回:

["1","2","Fizz","4","Buzz","Fizz","7","8","Fizz","Buzz","11","Fizz","13","14","FizzBuzz"]

现在,我被困在一件事上。如果我将值作为“15”传递,我想获得如下输出:

{"Fizz": [3, 6, 9, 12],"Buzz": [5, 10],"FizzBuzz": [15]}

我想按 Fizz、Buzz 和 FizzBu​​zz 对数字进行分组。

这是我的代码:

public class FizzBuzzService {

private Map<Rule, String> ruleContainers = new HashMap();
private Set<Rule> rules = new HashSet();

public FizzBuzzService(){
addRule(i -> i % 15 == 0, "FizzBuzz");
addRule(i -> i % 3 == 0, "Fizz");
addRule(i -> i % 5 == 0, "Buzz");
}

public void addRule(Rule rule, String res) {
rules.add(rule);
ruleContainers.put(rule, res);
}

public String getValue(int i) {
for (Rule rule : rules) {
if (rule.apply(i)) {
return ruleContainers.get(rule);
}
}
return String.valueOf(i);
}

//then the origin code should be as follows:
public List<String> fizzBuzz(int n) {
List<String> res = new ArrayList();
for(int i = 1; i <= n; i++){
res.add(getValue(i));
}
return res;
}

interface Rule{
boolean apply(int i);
}
}

如果有人能指导我,我将不胜感激。谢谢

最佳答案

这里有一种使用流的方法:

Map<String, List<String>> result = IntStream.rangeClosed(1, n)
.filter(i -> i % 3 == 0 || i % 5 == 0)
.boxed()
.collect(Collectors.groupingBy(i ->
i % 15 == 0 ? "FizzBuzz" :
i % 3 == 0 ? "Fizz" :
"Buzz"));

没有流:

Map<String, List<String>> result = new HashMap<>();
for (int i = 0; i < n; i++) {
if (i % 3 == 0 || i % 5 == 0) {
String key = i % 15 == 0 ? "FizzBuzz" :
i % 3 == 0 ? "Fizz" :
"Buzz";
result.computeIfAbsent(key, k -> new ArrayList<>()).add(i);
}
}

关于java - FizzBu​​zz 号码分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48354492/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com