Java 从列表中获取值
我有两个相同大小但类型不同的列表 例如:Java 从列表中获取值,java,Java,我有两个相同大小但类型不同的列表 例如: List<String> controlColor = new ArrayList<String>(); List<Integer> brightnessValue_1 = new ArrayList<Integer>(); int i = 0; for(String ledColor : controlColor) { Color color = Color.parseCSS(ledCo
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);
}
for(String ledColor : controlColor) {
Color color = Color.parseCSS(ledColor);
int brightnessValue = brightnessValue_1.get(controlColor.indexOf(ledColor));
}
for(int i=0;i
或一对迭代器:
Iterator<String> colorIt = colors.iterator();
Iterator<Integer> brightnessIt = brightness.iterator();
while (brightnessIt.hasNext() && colorIt.hasNext()) {
String ledColor = colorIt.next();
int brightnessValue = brightnessIt.next();
}
Iterator colorIt=colors.Iterator();
迭代器brightnessIt=brightness.Iterator();
while(brightnessIt.hasNext()&&colorIt.hasNext()){
字符串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);
}
List controlColor=new ArrayList();
List brightnessValue=new ArrayList();
对于(int-inx=0;inx
在我看来,您应该有一个类来表示这一对:
public class ColorBrightness {
String controlColor;
int brightnessValue_1;
}
然后你的两个列表就变成了一个列表,实际上最好的方法是把你的对象列表中包含相关信息
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();
}
如果不想使用额外的变量,可以使用此代码
for(String ledColor : controlColor) {
Color color = Color.parseCSS(ledColor);
int brightnessValue = brightnessValue_1.get(controlColor.indexOf(ledColor));
}
但是在这种情况下,controlColor不应该有重复的条目,并且两个arraylist的大小应该始终相同,否则您将得到更少的元素或IndexOutOfBoundsException。总结
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();
}
List colorList=new ArrayList();
对于(ColorData ColorData:colorList){
Color Color=colorData.getColor();
int-brightnessValue=colorData.getBrightnessValue();
}
为什么brightnessValue_1?。修复,thx“我想避免使用额外变量。”为什么?@AndyTurner我已经使用了很多变量,现在我正试图避免任何额外的变量。我想为每个循环使用。@Shiladittyacharaborty你不能,除非你像libik建议的那样做。哪一个性能更好,因为我在列表中有很多数据?使用迭代器方法。这取决于你没有
controlColor
中存在重复条目。是的,您是对的Andy…:)