Загрузить список в Java из его строкового представления? - PullRequest
1 голос
/ 11 июля 2011

Я знаю, что это легко сделать, написав функцию, однако мне было интересно, есть ли быстрый и удобный способ загрузки List в Java из его представления String.

Я приведу небольшой пример:

List<String> atts = new LinkedList<String>();
atts.add("one"); atts.add("two"); atts.add("three”);
String inString = atts.toString()); //E.g. store string representation to DB
...
//Then we can re-create the list from its string representation?
LinkedLisst<String> atts2 = new LinkedList<String>();

Thnx!

Ответы [ 4 ]

2 голосов
/ 11 июля 2011

Вы не хотели бы использовать toString () для этого. Вместо этого вы хотите использовать методы сериализации Java. Вот пример:

ByteArrayOutputStream stream = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(stream);
out.writeObject(list);
stream.close();
// save stream.toByteArray() to db

// read byte
ByteArrayInputStream bytes = ...
ObjectInputStream in = new ObjectInputStream(bytes);
List<String> list = in.readObject();

Это лучшее решение, потому что вам не нужно ничего разбивать или разбирать. Вы также можете использовать другие методы serilaizing, такие как json или xml. То, что я показал выше, построено на Java.

1 голос
/ 11 июля 2011

Нет надежного способа сделать это.Метод toString () для списков не предназначен для вывода чего-либо, что можно надежно использовать для сериализации списка.

Вот как это не может работать.посмотрите на это небольшое изменение в вашем примере:

public static void main(String[] args) {
    List<String> atts = new LinkedList<String>();
    atts.add("one");
    atts.add("two");
    atts.add("three, four");
    String inString = atts.toString();
    System.out.println("inString = " + inString);
}

Это выводит

inString = [one, two, three, four]

Похоже, что список содержит четыре элемента.Но мы добавили только три.Невозможно определить исходный список источников.

1 голос
/ 11 июля 2011

// Тогда мы можем заново создать список из его строкового представления?

Один из вариантов - согласиться использовать известный формат для преобразования в строковое представление и из него. Я бы остановился на CSV, поскольку это проще, если у вас нет запятых в самой исходной строке.

String csvString = "one,two,three";
List<String> listOfStrings = Arrays.asList(csvString.split(","));
0 голосов
/ 11 июля 2011

Вы можете создать список из его строкового представления.Это может быть не совсем тот же список, если строки содержат "," или строку null, но вы можете сделать это, и это будет работать для многих случаев использования.

List<String> strings = Arrays.asList("one", "two", "three");
String text = strins.asList();
// in this case, you will get the same list.
List<String> strings2=Arrays.asList(text.substring(1,text.length()-1).split(", "));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...