2015-11-03 135 views
0

我有兩個相同大小的列表,但類型不同。從列表中獲取值

例如:

List<String> controlColor = new ArrayList<String>(); 
List<Integer> brightnessValue_1 = new ArrayList<Integer>(); 

現在我想從位置相同的兩個表中獲取數據。

例如:

int i = 0; 

for(String ledColor : controlColor) { 
    Color color = Color.parseCSS(ledColor); 
    int brightnessValue = brightnessValue_1.get(i); 
    ++i; 
} 

在上面的方式,我可以從兩個列表,並從同一位置在同一時間的數據,但沒有任何其他的方式做同樣的事情,因爲我想避免使用額外的變量。

+2

http://stackoverflow.com/questions/15985266/how-得到迭代通過兩陣列列表 - 同時 –

+0

爲什麼是brightnessValue_1?固定,thx –

+0

「我想避免使用額外的變量。」爲什麼? –

回答

4

可以使用一個普通的for循環:

for (int i = 0; i < Math.min(controlColor.size(), brightnessValue.size(); ++i) { 
    String ledColor = controlColor.get(i); 
    int brightnessValue = brightnessValue.get(i); 
} 

或一對迭代的:

Iterator<String> colorIt = colors.iterator(); 
Iterator<Integer> brightnessIt = brightness.iterator(); 
while (brightnessIt.hasNext() && colorIt.hasNext()) { 
    String ledColor = colorIt.next(); 
    int brightnessValue = brightnessIt.next(); 
} 

(除其他選項)。後者是可取的,因爲它對於像LinkedList這樣的列表實現更高效,其中get操作是O(n),並且對於像ArrayList這樣的實現不會更低效。

+0

因爲我在列表中有很多數據,哪一個更好? –

+0

使用迭代器方法。 –

2

這個怎麼樣:

List<String> controlColor = new ArrayList<String>(); 
List<Integer> brightnessValue = new ArrayList<Integer>(); 

for(int inx = 0; inx < controlColor.size(); ++inx) 
{ 
controlColor.get(inx); 
brightnessValue.get(inx); 
} 
+0

我想用於每個循環。 –

+0

@ShiladittyaChakraborty你不能這樣做,除非你做像libik這樣的建議。 –

3

它看起來像你對我應該有代表該貨幣對類:

public class ColorBrightness { 
    String controlColor; 
    int brightnessValue_1; 
} 

那麼你的兩個列表成爲一個列表List<ColorBrightness>

2

其實最好的是有你的對象列表包含相關信息。

public class ColorAndBrightness{ 
    private String color; 
    private int brightness 

    //getters and setters 
} 

然後你就可以有

List<ColorAndBrightness> list 
... 
for (ColorAndBrightness item : list){ 
    Color color = Color.parseCSS(item.getColor()); 
    int brightnessValue = item.getBrightness(); 
} 

其實你可以創建一個在您ColorAndBrightness類可以幫助你與它的工作方法。

例如轉換爲彩色的東西,你可以直接放入你的構造函數,如果你想

public class ColorAndBrightness{ 
    private String textColor; 
    private int brightness 
    private Color color; 

    public ColorAndBrightness(String color, int brightness){ 
     this.textColor = color; 
     this.brightness = brightness; 
     this.color = Color.parseCSS(color); 
    } 

    //getters and setters 
} 
0

你可以用這個代碼去,如果你不想使用一個額外的變量。

for(String ledColor : controlColor) { 
    Color color = Color.parseCSS(ledColor); 
    int brightnessValue = brightnessValue_1.get(controlColor.indexOf(ledColor)); 
} 

但在這種情況下controlColor不應該有重複的條目,這兩個數組列表的大小應該始終是相同的,否則你會最終得到更少的元件或IndexOutOfBoundsException異常。

+1

這依賴於'controlColor'中沒有重複的條目。 –

+0

是的你是對的安迪... :) –

0

摘要

  1. 定義類的數據

    public class ColorData { 
        private String ledColorName; 
        private int brightnessValue; 
    
        public String getColorName() { 
         return ledColorName; 
        } 
    
        public Color getColor() { 
         return Color.parseCSS(ledColorName); 
        } 
    
        public int getBrightnessValue() { 
         return brightnessValue; 
        } 
    } 
    
  2. 從列表

    List<ColorData> colorList = new ArrayList<ColorData>(); 
    
    for(ColorData colorData : colorList) { 
        Color color = colorData.getColor(); 
        int brightnessValue = colorData.getBrightnessValue(); 
    }