所以我有 object
,可存储Country
,Year
和Value
然后我List<Object>
将存储每年的对象
每个List<object>
由每个年度范围的数据组成
我想循环遍历任意数量的国家/地区,让我们说4,然后在每个对象中我想要检索每个value
的{{1}}。
假设我们希望我们的对象将数据从year
返回到1980
所以我的代码看起来像这样:
1983
这可能吗?如果是的话,我怎么能得到它?
由于
答案 0 :(得分:0)
基于答案: “这只是为了说明我的问题。我的实际应用程序中没有这样的结构。代码上方的数据只是我数据的一个例子”
我建议您创建一个存储该数据的POJO:
class POJO { //add nice name to class!
private Map<Integer, Double> yearValueMap;
private String countryName;
// add setter and getter here.
add(Integer year, Double value) {
this.yearValueMap.put(year, value);
}
}
然后创建存储该数据的对象,如:
POJO pojo = new POJO();
pojo.add(1890, 14.31);
pojo.setCountryName("Italy");
所以你有包含这些数据的对象。那你有一个
List<POJO> countryInformation;
你可以迭代。
希望它有所帮助,而且我没有输入任何拼写错误,我在这里编写了它。
编辑以在评论中添加代码:
List <Object> myData = receiveDataFromApi();
for(int i = 0; i < myData.size(); i+=3) {
...
pojo.setCountryName= myData.get(i);
pojo.add(myData.get(i+2), myData.get(i+1));
...
}
我使用POJO只是为了说明问题,但你应该使用自己的模型。
答案 1 :(得分:0)
宣布你的POJO之后:
public class MyObject {
Integer year;
String country;
BigDecimal value;
public MyObject(Integer year, String country, BigDecimal value) {
super();
this.year = year;
this.country = country;
this.value = value;
}
//getter/setter
}
在列表中创建并添加了对象值之后:
...
MyObject af1 = new MyObject(1980,"AF",new BigDecimal("19199437988.8023"));
MyObject af2 = new MyObject(1981,"AF",new BigDecimal("20050189881.6659"));
MyObject af3 = new MyObject(1982,"AF",new BigDecimal("20046334303.9661"));
MyObject af4 = new MyObject(1983,"AF",new BigDecimal("20536542736.7297"));
...
MyObject ua1 = new MyObject(1980,"UA",new BigDecimal("90615023323.7353"));
MyObject ua2 = new MyObject(1981,"UA",new BigDecimal("131805126738.287"));
MyObject ua3 = new MyObject(1982,"UA",new BigDecimal("181334417615.413"));
MyObject ua4 = new MyObject(1983,"UA",new BigDecimal("175781379051.433"));
...
List<MyObject> completeList = Arrays.asList(af1,af2,af3,af4,ua1,ua2,ua3,ua4,id1,id2,id3,id4,au1,au2,au3,au4);
您可以使用java8流来获取您正在寻找的内容:
1)过滤原始列表,以便只获取1980<=year<=1983
的对象:
int yearFrom =1980;
int yearTo =1983;
List<MyObject> filteredList = completeList.stream().filter(s -> s.getYear()>=yearFrom && s.getYear()<=yearTo).collect(Collectors.toList());
2)为每个国家/地区获取map(year,value)
,即AF
:
Map<Integer, BigDecimal> map = filteredList.stream()
.filter(s -> ("AF").equals(s.getCountry()))
.collect(
Collectors.toMap(
s -> ((MyObject)s).getYear(),
s -> ((MyObject)s).getValue())
);
System.out.println("(year,value) for AF Country are:");
System.out.println(map);
您可以通过以下方式获取这样的地图:Map(country,Map(year,value))
:
Map<String, Map<Integer, BigDecimal>> mapCountries = filteredList.stream()
.collect(Collectors.groupingBy(MyObject::getCountry,
Collectors.toMap(
s -> s.getYear(),
s -> s.getValue()))
);
然后,您可以遍历各个国家/地区并mapCountries.get(country)
以获取每个国家/地区的Map(year,value)
。