我的SQL Server 2012数据库中有一个表格如下:
Student:
ID, CardNo, Name, ZipCode, city, ...
我正在使用JDK 8编写Java桌面应用程序,其中我想将HashMap
中的选定行放在CardNo
作为键,Name
作为值。HashMap
作为值。
使用lambda表达式填充此CardNo
的有效方法是什么?
注意:func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject])
是唯一的。
答案 0 :(得分:2)
这个怎么样:
List<Student> students = xxxDao.findFromDB();
Map<String, String> map = students.stream().collect(
Collectors.groupingBy(Student::getCardNo,
Collectors.collectingAndThen(
Collectors.mapping(Student::getName,
Collectors.toList()), nameList->nameList.get(0))));
----------------------------------------------- --------分裂线---------------------------------------- --------------------------
这种方式我给出的内容相当复杂,并且由于@FedericoPeraltaSchaffner,还有其他更简单的方式来表达我们想要的东西。由于CardNo
是唯一的,因此请使用Collectors.toMap
List<Student> students = xxxDao.findFromDB();
Map<String, String> map = students.stream().collect(Collectors.toMap(Student::getCardNo, Student::getName));
答案 1 :(得分:2)
为什么要使用lambda?保持简单:
ResultSet resultSet = stmt.executeQuery(query); // assuming this
Map<String, String> map = new HashMap<>();
while(resultSet.next())
map.put(resultSet.getString("CardNo"), resultSet.getString("Name"));
使用streams / lambdas并不是最好的选择,就像这里一样。
答案 2 :(得分:1)
这是一种更简单的方法:
List<Student> students = xxxDao.retrieveStudents();
Map<Integer, String> map = students.stream()
.collect(Collectors.toMap(Student::getCardNo, Student::getName));
此外,您可以为Collectors.toMap
添加静态导入,并使表达式更具可读性。