从列表中获取值
我有两个相同大小的列表,但类型不同。从列表中获取值
例如:
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;
}
在上面的方式,我可以从两个列表,并从同一位置在同一时间的数据,但没有任何其他的方式做同样的事情,因为我想避免使用额外的变量。
可以使用一个普通的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
这样的实现不会更低效。
因为我在列表中有很多数据,哪一个更好? –
使用迭代器方法。 –
这个怎么样:
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);
}
我想用于每个循环。 –
@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异常。
这依赖于'controlColor'中没有重复的条目。 –
是的你是对的安迪... :) –
摘要
-
定义类的数据
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; } }
-
从列表
List<ColorData> colorList = new ArrayList<ColorData>(); for(ColorData colorData : colorList) { Color color = colorData.getColor(); int brightnessValue = colorData.getBrightnessValue(); }
http://stackoverflow.com/questions/15985266/how-得到迭代通过两阵列列表 - 同时 –
为什么是brightnessValue_1?固定,thx –
“我想避免使用额外的变量。”为什么? –