Java 如何将字符串数组列表转换为对象列表

Java 如何将字符串数组列表转换为对象列表,java,object,arraylist,Java,Object,Arraylist,我想将列表转换为列表,以便新列表中的每个对象都包含每个字符串[]的第一个元素 您知道这在java中是否可以实现吗 例如: public List<String[]> readFile(){ String[]array1={"A","1.3","2.4","2.3"}; String[]array2={"B","1.43","3.4","2.8"}; String[]array3={"C","5.23","2.45","2.9"}; List<String[]&

我想将列表转换为列表,以便新列表中的每个对象都包含每个字符串[]的第一个元素

您知道这在java中是否可以实现吗

例如:

public List<String[]> readFile(){
  String[]array1={"A","1.3","2.4","2.3"};
  String[]array2={"B","1.43","3.4","2.8"};
  String[]array3={"C","5.23","2.45","2.9"};

  List<String[]>ReadFile= new ArrayList<String[]>();

  ReadFile.add(array1);
  ReadFile.add(array2);
  ReadFile.add(array3);

  return ReadFile;
}
public List readFile(){
字符串[]数组1={“A”、“1.3”、“2.4”、“2.3”};
字符串[]数组2={“B”,“1.43”,“3.4”,“2.8”};
字符串[]数组3={“C”、“5.23”、“2.45”、“2.9”};
ListReadFile=新建ArrayList();
ReadFile.add(array1);
ReadFile.add(array2);
ReadFile.add(array3);
返回ReadFile;
}
现在我想要一个方法,它将从上面的列表ReadFile以某种方式将字符串数组分割成一个ID,它将是第一个元素“a”、“B”、“C”,另一部分是数字的字符串数组,我将通过另一种方法将数字从string转换为Double类型。我已经得到了转换为double的方法,但是我需要能够跟踪ID字段,因为ID字段将用于标识数字数组

一位朋友建议我创建一个对象,其中每个对象都有一部分作为字符串ID,另一部分作为数组。这是我不知道该怎么做的部分

有人能帮忙吗? 下面是我认为应该具有的方法声明,因此返回类型将是列表,其中每个数组已转换为包含两部分的对象

public List<Object> CreateObject(List<String[]>ReadFile){

}
公共列表CreateObject(ListReadFile){ } 谢谢, 杰特诺里

大家好,谢谢你们抽出时间来帮忙。
我可以看到使用哈希表的好处。到目前为止,我正在努力实施它。我知道我可能有点跑题,但我只是想解释一下我想做什么: 在我的项目中,我有一个包含基因表达水平数据的CSV文件。我从OpenCSV读取文件时使用的方法返回一个列表(字符串[]),其中每个字符串[]都是文件中的一行。每行的第一个元素是变量名(recA、ybjE等)。行的其余部分将是与该变量相关的数字数据。我想计算每个数字数组之间的Pearson相关性。我已经实现的方法已经为我做到了这一点,但我现在的问题是,我必须先从数组中删除字符串值,然后才能通过迭代数组转换为double。在我通过保持ID链接到行来计算每个双倍数组之间的相关性之后,我希望能够在相关性高于我将设置的阈值(例如相关性高于0.80)的基因之间绘制一个无向节点图。我不知道我是不是咬得太多了,但我还有30天的时间,我相信在像你们这样的人的帮助下,我会度过难关的。
对不起,我要讲一会儿。 谢谢 Jetnori.

听起来你需要的是一个索引而不是一个列表,它允许你通过一个键(在你的案例ID中)来索引事物

如果希望值是双精度的,而不是字符串,那么在放入数组(map.put调用)之前需要更改数组。我建议使用列表或其他集合,而不是数组。您可能还希望从这些值中删除ID部分,我的代码没有这样做。

听起来您需要的是一个列表,而不是一个列表,它允许您通过一个键(在您的示例ID中)对内容进行索引


如果希望值是双精度的,而不是字符串,那么在放入数组(map.put调用)之前需要更改数组。我建议使用列表或其他集合,而不是数组。你也可能想从这些值中删除ID部分,我的代码不这样做。

< P>我不理解你的目标,但是对于“一个有2个部分的对象”,你可以考虑把它们存储在一个哈希表中:

< P>我不明白你的目标,但是对于“一个有2个部分的对象”,你可以考虑把它们存储在一个哈希表中:

,我同意ALB提供的答案,但是这是你的朋友建议的,首先你需要一个类来表示数据。我已经包括了一个解析数据的构造函数和一个接受已经解析的数据的构造函数,这取决于您对事物的看法

public class NumberList {
  private double[] numbers;
  private String key;

  public NumberList(Strig key, double[] numbers){
    this.ley = key;
    this.numbers = numbers;
  }

  public NumberList(String[] inputList) {
    key = inputList[0];
    numbers = new double[inputList.length-1];
    for(int i=1;i<inputList.length;i++){
      numers[i-1] = Double.parseDouble(inputList[i]);
    }
  }

  public String getKey() {
    return key;
  }

  public double[] getNumbers() { 
    return numbers;
  }
}
公共类编号列表{
私人双[]号码;
私钥;
公共数字列表(Strig键,双[]数字){
this.ley=键;
这个。数字=数字;
}
公用号码列表(字符串[]输入列表){
键=输入列表[0];
数字=新的双精度[inputList.length-1];

对于(int i=1;i我同意Alb提供的答案,不过这是你朋友的建议,首先你需要一个类来表示数据。我包括了一个解析数据的构造函数和一个接受已解析数据的构造函数,具体取决于你的想法

public class NumberList {
  private double[] numbers;
  private String key;

  public NumberList(Strig key, double[] numbers){
    this.ley = key;
    this.numbers = numbers;
  }

  public NumberList(String[] inputList) {
    key = inputList[0];
    numbers = new double[inputList.length-1];
    for(int i=1;i<inputList.length;i++){
      numers[i-1] = Double.parseDouble(inputList[i]);
    }
  }

  public String getKey() {
    return key;
  }

  public double[] getNumbers() { 
    return numbers;
  }
}
公共类编号列表{
私人双[]号码;
私钥;
公共数字列表(Strig键,双[]数字){
this.ley=键;
这个。数字=数字;
}
公用号码列表(字符串[]输入列表){
键=输入列表[0];
数字=新的双精度[inputList.length-1];
对于(int i=1;i
public class Split_list with id{
Hashtable=新的Hashtable();
分离器spl;
带有ID的公共拆分列表(拆分器拆分){
spl=分割;
}
专用无效补遗(字符串键,字符串[]VAL){
表.put(键,VAL);
}
公共空解析列表(列表){
for(字符串[]项:列表){
String[]temp=新字符串[entry.length-1];
System.arraycopy(entry,1,temp,0,entry.length-1);
附录(条目[0],spl.GetStringArrayOfNumber(临时));
}
}
类SplittingHelper实现拆分器{
@凌驾
公共字符串[]GetStringArrayOfNumber(字符串[]arr){
字符串[]strArray=null;
//在这里实现
返回arr;
}
}
接口分离器{
字符串[]GetStringArrayOfNumber(字符串[]arr);
}
}

您必须使用哈希表而不是对象列表。(我假设您需要在列表中搜索给定的条目。)
public class NumberList {
  private double[] numbers;
  private String key;

  public NumberList(Strig key, double[] numbers){
    this.ley = key;
    this.numbers = numbers;
  }

  public NumberList(String[] inputList) {
    key = inputList[0];
    numbers = new double[inputList.length-1];
    for(int i=1;i<inputList.length;i++){
      numers[i-1] = Double.parseDouble(inputList[i]);
    }
  }

  public String getKey() {
    return key;
  }

  public double[] getNumbers() { 
    return numbers;
  }
}
public List<NumberList> CreateObject(List<String[]> ReadFile){
  ArrayList<NumberList> returnList = new ArrayList<NumberList>(ReadFile.size());
  for (String[] input : ReadFile) {
    returnList.add(new NumberList(input));
  }
  return returnList;
}
public List<NumberList> createObject(List<String[]> readFile){
    ...
}
public class Split_ListwithIDs {

Hashtable<String, String[]> table = new Hashtable<String, String[]>();
Splitter spl ;

public Split_ListwithIDs(Splitter split){
    spl = split;
}

private void addEntry(String key , String[] vals){
    table.put(key, vals);
}

public void parseList(List<String[]> list){
    for(String[] entry : list){
        String[] temp = new String[entry.length - 1];
        System.arraycopy(entry, 1, temp, 0,entry.length - 1);
        addEntry(entry[0], spl.GetStringArrayOfNumbers(temp));
    }
}

class SplittingHelper implements Splitter{

    @Override
    public String[] GetStringArrayOfNumbers(String[] arr) {
        String[] strArray = null ;

        // implementation here
        return arr;
    }

}

interface Splitter {
    String[] GetStringArrayOfNumbers(String[] arr);
}