gpt4 book ai didi

java - 动态创建 boolean 值列表

转载 作者:行者123 更新时间:2023-12-01 22:20:14 24 4
gpt4 key购买 nike

想象一下,我们正在提取有关人们及其喜爱的食物的数据。
数据将以以下格式提供给我们:“Name, FavFood1, FavFood2..FavFoodn”。
例如“詹姆斯、 bean 类、鸡肉”。
请注意,我们不知道一个人会喜欢多少种食物。

根据这些数据,我们创建一个 Person 对象的实例,该对象捕获该人的姓名和最喜欢的食物。
提取每个人的数据后,我们想要创建一个电子表格,其列为:Name|Potato|Chicken|Beans|Curry 等。
该人姓名右侧的所有值都是简单的 boolean 值,表示该食物是否是该人最喜欢的食物之一。
问题是:我们事先并不知道;某人可能喜欢的所有食物,因此不能只在 Person 类中设置 boolean 实例变量。

我已经对此进行了一些思考,实现了集合、哈希集和 HashMap ,但是我想到的每一个解决方案最终都非常不优雅,因此我向 stackoverflow 的天才寻求帮助。
我的问题是:我可以使用什么设计模式/方法来干净地实现我想要的结果?
虽然这是一个与语言无关的问题,但我正在对此进行编程在 Java 中,所以如果 Java API 或其他地方为此构建了任何内容,请告诉我。
提前致谢!

最佳答案

试试这个。它生成 csv 格式的数据。

class Person {
final String name;
final Set<String> foods;

Person(String name, Set<String> foods) {
this.name = name;
this.foods = foods;
}

Stream<Boolean> getBooleans(List<String> foods) {
return foods.stream().map(food -> this.foods.contains(food));
}

@Override
public String toString() {
return "Person(" + name + ", " + foods +")";
}
}

class Test {
public static void main(String[] args) throws Exception {
List<String> data = Arrays.asList(
"James, Beans, Chicken",
"Emily, Potato, Curry",
"Clara, Beans, Curry"
);

List<String> foodNames = Arrays.asList(
"Potato", "Chicken", "Beans", "Curry"
);

Stream<Person> persons = data.stream().map(d -> {
String[] split = d.split(",");
for(int i = 0; i < split.length; i++) {
split[i] = split[i].trim();
}
String name = split[0];
Set<String> foods = Stream.of(split).skip(1).collect(Collectors.toSet());
return new Person(name, foods);
});

Stream<String> csvData = persons.map(p ->
p.name + ", " + p.getBooleans(foodNames)
.map(b -> b.toString())
.collect(Collectors.joining(", "))
);
csvData.forEach(System.out::println);
}
}

关于java - 动态创建 boolean 值列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30005508/

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