Arrays.asList的等效形式,包含数据库中的数据

时间:2016-12-21 08:30:49

标签: java arraylist set

我从数据库接收数据作为一串项目,例如"Nike, Adidas, Reebok"

String data = "Nike, Adidas, Reebok";

我有一个算法,它使用下面显示的方法接收列表:

itemSetList.add(new HashSet<>(Arrays.asList("Nike", "Adidas","Reebok")));

变量itemSetList的格式为:

List<Set<String>> itemsetList;

初始化为:

itemSetList = new ArrayList<>();

如何将字符串data = "Nike, Adidas, Reebok"中获取的值更改为"Nike", "Adidas", "Reebok"形式,以便将其添加到itemSetList中?

4 个答案:

答案 0 :(得分:2)

您可以使用分隔符,\\s?拆分输入字符串,用引号包裹每个鞋子,然后使用生成的数组形成一个集合。

String data = "Nike, Adidas, Reebok";
String[] shoes = data.split(",\\s?");
for (int i=0; i < shoes.length; ++i) {
    shoes[i] = "\"" + shoes[i] + "\"";
}
Set<String> shoesSet = new HashSet<String>(Arrays.asList(shoes));

然后按计划使用该集:

itemSetList.add(shoesSet);

但是,我觉得您可能正在处理JSON或其他类似的数据,在这种情况下,您可能应该使用可自动处理引号的解析器。

答案 1 :(得分:2)

尝试将split(",")字符串添加到String Array,然后将每个trim() -ed String添加到HashSet对象,稍后您可以添加{ {1}}反对HashSet

List<Set<String>>

或者如果您想要更短的版本, 请注意,import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class Main { public static void main(String[] args) throws Exception { String data = "Nike, Adidas, Reebok"; String[] items = data.split(","); List<Set<String>> itemsetList = new ArrayList<>(); Set<String> hashSet = new HashSet<String>(); for (String item : items) hashSet.add(item.trim()); itemsetList.add(hashSet); for (Set<String> set : itemsetList) { for (String string : set) System.out.println(string); } } } 会在逗号后面跟一个空格split(",\\s")。这与,后跟split(",")相同。

trim()

答案 2 :(得分:0)

您可以在将数据添加到列表时拆分数据:

itemSetList.add(new HashSet<>(Arrays.asList(data.split(","))));

答案 3 :(得分:0)

我真的怀疑返回的字符串是数据库中单个字段的内容。它看起来更像某种聚合。
如果有可能该列表中的元素数量发生变化,我是对的

因此,我也怀疑List<Set<String>> itemsetList;是在Java程序中存储这些值的适当结构。

然而我的建议是通过将值列表拆分为SQL语句中的各个列来解决数据库方面的这个问题。

这将为每个结果行提供一个单独的名称(这是我所期望的),或者它为每个结果行提供一个固定数量的列,您可以轻松地将其放入HashSet。

我知道其他人的建议实施起来的努力较少,但从长期来看,从一开始就花费一些时间在适当的数据结构上。