我正在尝试使用HashMap创建一个自定义Itemreader,这里是一个eaxmple,我发现它使用的是一个使用列表而不是HashMap的itemReader
#welcome
正如你在这里看到的,我们可以通过它的位置(索引)迭代一个列表,所以当我们下次调用方法read()时,我们保证我们得到下一个元素。
但在我的情况下,没有索引的概念,因为HashMap没有位置的概念,因此无法按位置获取对象。
haw可以更新此代码以使用我的案例:
public class InMemoryStudentReader implements ItemReader<StudentDTO> {
private int nextStudentIndex;
private List<StudentDTO> studentData;
InMemoryStudentReader() {
initialize();
}
private void initialize() {
StudentDTO tony = new StudentDTO();
tony.setEmailAddress("tony.tester@gmail.com");
tony.setName("Tony Tester");
tony.setPurchasedPackage("master");
StudentDTO nick = new StudentDTO();
nick.setEmailAddress("nick.newbie@gmail.com");
nick.setName("Nick Newbie");
nick.setPurchasedPackage("starter");
StudentDTO ian = new StudentDTO();
ian.setEmailAddress("ian.intermediate@gmail.com");
ian.setName("Ian Intermediate");
ian.setPurchasedPackage("intermediate");
studentData = Collections.unmodifiableList(Arrays.asList(tony, nick, ian));
nextStudentIndex = 0;
}
@Override
public StudentDTO read() throws Exception {
StudentDTO nextStudent = null;
if (nextStudentIndex < studentData.size()) {
nextStudent = studentData.get(nextStudentIndex);
nextStudentIndex++;
}
return nextStudent;
}
}
我是否需要将hashMap更改为LinkedHashMap或将地图转换为List?
答案 0 :(得分:0)
如果您不想在实现中使用任何类型的索引,那么可以在循环中编写read(idx)
,其中read()
将被称为idx次。
答案 1 :(得分:0)
没有像0,1,... n这样的索引,但您可以按特定顺序使用密钥(例如字母排序)。另一种方法是通过调用yourHashMap.keySet()。iterator()获取Iterator对象,并将该对象用作class-attribute而不是nextStudentIndex属性。然后使用如下代码段:
if (yourIterator.hasNext()) return yourHashMap.get(youtIterator.next());
else return null;