2014-09-12 36 views
0

我有一個方法來計算一個bean中的每一行的整數MyPeriod。我不想更改類MyPeriod,創建一個新類或有兩個列表,但我需要返回一個包含MyPeriod列表的新列的列表。處理這個問題的方法是什麼?如何將新字段/數據「附加」到對象中而不創建新類或修改類?

public ??? bindNewColumn (List<MyPeriod> periods) { 
    List<Integer> newList = new ArrayList<>(); 
    for (MyPeriod period : periods) { 
     newList.add(calculation(period)); 
    } 

    return ???; 
} 
+1

問題是什麼?列表?也許你的意思是一張地圖? – 2014-09-12 20:16:18

+0

返回一個地圖,而不是Period作爲關鍵字並將計算作爲值? – user3487063 2014-09-12 20:17:32

+0

@ user3487063:聽起來會很糟糕。 – Dici 2014-09-12 20:17:57

回答

2

您已列出好的備選方案 - 創建一個新班級並更改MyPeriod

如果你想有一個壞女人,你可以返回一個數組,並讓您的來電者認爲它有兩個項目:

// This is a very dirty approach. Do not use in production. 
public List[] bindNewColumn (List<MyPeriod> periods) { 
    ... 
    return new List[] { periods, newList }; 
} 

如果你知道,在List<MyPeriod>各個時期是不同的,而且也是MyPeriod實行穩健的hashCode()equals(),你可以使用LinkedHashMap<MyPeriod,Integer>建立您的映射:

public LinkedHashMap<MyPeriod,Integer> bindNewColumn (List<MyPeriod> periods) { 
    LinkedHashMap<MyPeriod,Integer> res = new LinkedHashMap<MyPeriod,Integer>(); 
    for (MyPeriod period : periods) { 
     res.put(period, calculation(period)); 
    } 
    return res; 
} 
1

如果你正在使用JDK7或更高版本,可以使用javafx.util.Pair:

public Pair<List<MyPeriod>,List<Integer>> bindNewColumn (List<MyPeriod> periods) { 
    ... 
    return new Pair<List<MyPeriod>,List<Integer>>(periods,newList); 
} 
0
public Map<MyPeriod, Integer> bindNewColumn (List<MyPeriod> periods) { 
     Map<MyPeriod, Integer> map = new HashMap<MyPeriod, Integer>(); 
     for (MyPeriod period : periods) { 
      map.put(period, calculation(period)); 
     } 
     return map; 
    } 
+0

如果'MyPeriod'在列表中不唯一 – 2014-09-12 20:24:33

+0

可能會導致麻煩是的,同意。最好是創建一個可以保存MyPeriod和計算值的新類。 – TheCodingFrog 2014-09-12 20:27:37

1

隨着Pair

public List<Pair<MyPeriod, Integer>> bindNewColumn(List<MyPeriod> periods) { 
    final List<Pair<MyPeriod, Integer>> newList = new ArrayList<>(); 
    for (MyPeriod period : periods) { 
     newList.add(Pair.of(period, calculation(period))); 
    } 

    return newList; 
} 
相關問題