简体   繁体   中英

Java Convert List<String> to List<Object>

I've two classess CsvRead and MyOwnClass.

In CsvRead I've a method public static List getDataFromCsv(); It returns list of all data. And this data I want to take in another method in class MyOwnClass and return there as list of objects of My OwnClass

It looks like this:

List<String> dataFromCsv = new ArrayList<String>();

And in another class, I want to convert it to List<Object> of my class.

private static List<String> getDataFromCsvClass = new ArrayList<String>();
getDataFromCsvClass = CsvReader.getAllCsvData(filename);
String name = dataFromCsv[0];
String surname = dataFromCsv[1];
String birth = dataFromCsv[2];

I want to return new MyOwnClass(name, surname, birth);

MY ERROR: array required but List found: String name = allData[0]; etc

You can create a method to convert a String to MyOwnClass and use stream to map the elements, eg:

public static MyOwnClass convertToObject(String element){
    String[] tokens = element.split(",");
    return new MyOwnClass(tokens[0], tokens[1], tokens[2]);
}

//code to convert
List<String> dataFromCsv = new ArrayList<String>();
List<MyOwnClass> list = dataFromCsv.stream()
.map(e -> convertToObject(e))
.collect(Collectors.toList());

However, this may not work if let's say name or surname contains comma. In which case, I would recommend having a look at OpenCSV library and this example of how to read csv into objects.

Supposing that the list contains the name, surname and birth in every group of 3 strings (ie, the elements on index 0, 3, 6, 9 etc. contain the name), you might try the following:

public List<MyOwnClass> convertCsvData(List<String> csv_data)
{
  // Initialize result
  List<MyOwnClass> result;
  result = new ArrayList<MyOwnClass>();

  // Parse data
  int    counter;
  String name;
  String surname;
  String birth;
  for (counter = 0; counter < csv_data.size(); counter += 3)
  {
    name = csv_data.get(counter);
    surname = csv_data.get(counter + 1);
    birth = csv_data.get(counter + 2);
    result.add(new MyOwnClass(name, surname, birth));
  }

  // Done
  return (result);

} // convertCsvData

Somthing like this :

private static MyOwnClass toMyOwnClass(String str){
 String[] object= str.split(",");
 return new MyOwnClass(object[0], object[1], object[2]);
 }



 List<String> dataFromCsv = new ArrayList<String>(); 
 List<MyOwnClass> list = new ArrayList<>();

 for(String string : dataFromCsv ){
     if(StringUtils.isNoneEmpty(string)){
     list.add(toMyOwnClass(string));
   }
 }

And then you return your list

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM