簡體   English   中英

如何將字符串數組列表轉換為對象列表

[英]How to convert a List of String arrays to a List of objects

我想將列表轉換為列表,以便新列表上的每個對象都包含每個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;
}

現在,我想要一個方法,該方法將從上方獲取列表ReadFile,以某種方式將字符串數組拆分為一個ID,該ID將是第一個元素“ A”,“ B”,“ C”,而另一部分將是我將通過另一種方法將數字從String轉換為Double類型的數字。 我已經有了轉換為double的方法,但是我需要能夠跟蹤ID字段,因為ID字段將用於標識數字數組。

一位朋友建議我創建一個對象,其中每個對象的一部分作為字符串ID,另一部分作為數組。 那是我不知道該怎么做的部分。

有人可以幫忙嗎? 下面是我認為應該有的方法聲明,因此返回類型將是List,其中每個數組都已轉換為包含兩部分的Object。

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

}

謝謝,Jetnori。

大家好,謝謝您抽出寶貴的時間為您提供幫助。
我可以看到使用HashTables的好處。 我到目前為止正在嘗試實施它。 我知道我可能會有點偏離,但只是為了解釋我要做什么:在我的項目中,我有CSV文件,其中包含有關基因表達水平的數據。 我從OpenCSV中使用的讀取文件的方法返回一個List(String []),其中每個String []是文件中的一行。 每行的第一個元素是變量名(recA,ybjE等)。 該行的其余部分將是與該變量相關的數字數據。 我想計算每個數字數組之間的Pearson相關性。 我已經實現的方法已經為我做到了,但是我現在遇到的問題是,必須先從數組中刪除字符串值,然后才能遍歷數組,將其轉換為double。 在設法通過仍然將ID鏈接到行來計算每個double數組之間的相關性之后,我希望能夠在相關性高於我將要設置的閾值的基因之間繪制無向節點圖(例如相關性高於0.80)。 我不知道我的咀嚼量是否超過我的咀嚼能力,但我有30天的時間去做,我相信在像你們這樣的人的幫助下,我會成功的。
對不起,請繼續。 謝謝,Jetnori。

我同意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;
  }
}

然后,您需要使用函數來生成列表:

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;
}

請注意,這使用解析數據的構造函數,如果使用其他構造函數,則“ CreateObject”功能將需要包含解析邏輯。

最后,請注意,java中的標准約定是,唯一大寫的是類名和最終的靜態字段(出現在所有帶下划線的大寫字母中),因此通常方法簽名為:

public List<NumberList> createObject(List<String[]> readFile){
    ...
}

聽起來您需要一個Map而不是一個List,它使您可以通過鍵(在您的情況下為ID)為事物建立索引。

Map<String, String[]> map = new Hashmap<String, String[]>();
for( String[] array : ReadFile ){
   map.put( array[0], array );
}

然后獲取“ A”的值數組,您可以這樣做:

String[] values = map.get( "a" );

如果您希望將值改為雙精度值而不是字符串,則需要在放置數組之前更改數組(map.put調用),我建議您使用列表或其他集合而不是數組。 您也可能還希望從這些值中刪除ID部分,而我的代碼不會這樣做。

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);
}

}

您將不得不使用哈希表而不是對象列表。(我假設您將需要使用“第一個字母”作為鍵在列表中搜索給定的條目-如果要使用列表,這將非常麻煩)。

SplittingHelper方法中,提供自定義邏輯來解析數字字符串並返回另一個數字字符串[]。

我不了解您的目標,但是對於“有兩個部分的對象”,您可以考慮將它們存儲在哈希表中: http//download.oracle.com/javase/6/docs/api/java/util/Hashtable。 HTML

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM