从列表中获取值

问题描述:

我有两个相同大小的列表,但类型不同。从列表中获取值

例如:

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

“我想避免使用额外的变量。”为什么? –

可以使用一个普通的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

使用迭代器方法。 –

这个怎么样:

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这样的建议。 –

它看起来像你对我应该有代表该货币对类:

public class ColorBrightness { 
    String controlColor; 
    int brightnessValue_1; 
} 

那么你的两个列表成为一个列表List<ColorBrightness>

其实最好的是有你的对象列表包含相关信息。

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 
} 

你可以用这个代码去,如果你不想使用一个额外的变量。

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

但在这种情况下controlColor不应该有重复的条目,这两个数组列表的大小应该始终是相同的,否则你会最终得到更少的元件或IndexOutOfBoundsException异常。

+1

这依赖于'controlColor'中没有重复的条目。 –

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