如何使用Lambda表达式将数据从ResultSet放入HashMap?

时间:2016-05-08 23:52:45

标签: sql-server lambda hashmap java-8

我的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])是唯一的。

3 个答案:

答案 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添加静态导入,并使表达式更具可读性。