List<String> collect = lists.stream().map(t -> t.getBusinessid()).collect(Collectors.toList());
时间: 2024-06-04 08:07:10 浏览: 10
这是一个 Java 8 中使用 Stream API 对一个 List 进行操作的示例代码。它的作用是从一个 List 中获取每个元素的 businessid 属性,并将它们收集到一个新的 List 中。
具体来说,假设我们有一个 List<SomeObject> 类型的 lists 变量,其中 SomeObject 类型的对象具有一个名为 businessid 的属性。我们可以通过 Stream API 的 map() 方法将每个元素转换为它的 businessid 属性,最后通过 collect() 方法将所有转换后的值收集到一个新的 List<String> 类型的 collect 变量中。
需要注意的是,这段代码中使用了 Java 8 中的 Lambda 表达式,它的作用是将一个 SomeObject 类型的对象 t 转换为它的 businessid 属性。在 Stream API 中,Lambda 表达式可以被用来简洁地表达一些操作,例如 map()、filter()、reduce() 等等。
相关问题
@RequestMapping("addMsgList.action") public String addMsgList( String businessid,String msg){ this.front(); if (this.getSession().getAttribute("userid") == null) { return "redirect:/index/preLogin.action"; } String userid = (String) this.getSession().getAttribute("userid"); MyMsgList list=new MyMsgList(); list.setUserid(userid); list.setBusinessid(businessid); List<MyMsgList> lists = msgService.listByUser(userid); if (lists.size()>0){ List<String> collect = lists.stream().map(t -> t.getBusinessid()).collect(Collectors.toList()); if (!collect.contains(businessid)){ //添加链接 msgService.addMsgList(list); } }else { //添加链接 msgService.addMsgList(list); } MyMsgs obj=new MyMsgs(); obj.setMsg(msg); obj.setBusinessid(businessid); obj.setUsersid(userid); return addMsg(obj); }解析上述代码并找出核心代码
上述代码是一个 Java Web 应用程序中的一个 Controller 的方法,它的核心代码如下:
```java
MyMsgList list=new MyMsgList();
list.setUserid(userid);
list.setBusinessid(businessid);
List<MyMsgList> lists = msgService.listByUser(userid);
if (lists.size()>0){
List<String> collect = lists.stream().map(t -> t.getBusinessid()).collect(Collectors.toList());
if (!collect.contains(businessid)){
//添加链接
msgService.addMsgList(list);
}
}else {
//添加链接
msgService.addMsgList(list);
}
MyMsgs obj=new MyMsgs();
obj.setMsg(msg);
obj.setBusinessid(businessid);
obj.setUsersid(userid);
return addMsg(obj);
```
这段代码的功能是将用户的消息添加到一个消息列表中。具体来说,它首先创建一个 `MyMsgList` 对象并设置它的用户 ID 和业务 ID,然后调用 `msgService` 的 `listByUser` 方法获取该用户已有的消息列表,如果已有的消息列表中不包含当前的业务 ID,就将当前的消息列表添加到数据库中。接下来,它创建一个 `MyMsgs` 对象并设置它的消息内容、业务 ID 和用户 ID,最后调用 `addMsg` 方法将该消息添加到数据库中。
优化这段代码:List<CompletableFuture<ContactsIntersectionVo>> futureList = intersectionResult.entrySet().stream().map(entry -> CompletableFuture.supplyAsync(() -> { String account = entry.getKey(); List<String> personNoList = entry.getValue().stream().distinct().collect(Collectors.toList()); if (personNoList.size() >= 2) {// 取两个以上的交集 List<Map<String, Object>> remarkList = Lists.newArrayList(); List<PersonBasicVo> personVoList = Lists.newArrayList(); // 获取备注、涉案人 for (String personNo : personNoList) { Map<String, Object> contactsMap = contactsMapList.stream().filter(map -> personNo.equals(map.get("personNo"))).findAny().get(); List<ContactsBasic> contactsList = (List<ContactsBasic>) contactsMap.get("contactsList"); // 获取备注 for (ContactsBasic contacts : contactsList) { if (account.equals(contacts.getRelationshipAccount())) { PersonBasicVo personBasic = personList.stream().filter(person -> personNo.equals(person.getPersonNo())).findAny().get(); Map<String, Object> remarkMap = new HashMap<>(); remarkMap.put("name", personBasic.getName()); remarkMap.put("remark", contacts.getRelationshipName()); remarkList.add(remarkMap); break; } } // 获取涉案人 personVoList.add(personList.stream().filter(person -> personNo.equals(person.getPersonNo())).findAny().get()); } // 共同号码是否属于涉案人 String commonPersonName = getCommonPersonName(personList, account); ContactsIntersectionVo contactsVo = new ContactsIntersectionVo(); contactsVo.setRemarks(remarkList); contactsVo.setPersons(personVoList); contactsVo.setCommonAccount(account); contactsVo.setCommonPersonName(commonPersonName); return contactsVo; } else { return null; } }, executor)).collect(Collectors.toList()); contactisVoList.addAll(futureList.stream().map(CompletableFuture::join) .filter(Objects::nonNull) .collect(Collectors.toList()));
优化后的代码如下:
```java
List<CompletableFuture<ContactsIntersectionVo>> futureList = intersectionResult.entrySet().stream()
.map(entry -> CompletableFuture.supplyAsync(() -> {
String account = entry.getKey();
List<String> personNoList = entry.getValue().stream().distinct().collect(Collectors.toList());
if (personNoList.size() >= 2) {// 取两个以上的交集
List<Map<String, Object>> remarkList = personNoList.stream()
.flatMap(personNo -> {
Map<String, Object> contactsMap = contactsMapList.stream()
.filter(map -> personNo.equals(map.get("personNo")))
.findAny()
.orElseThrow(() -> new NoSuchElementException("Person not found"));
List<ContactsBasic> contactsList = (List<ContactsBasic>) contactsMap.get("contactsList");
PersonBasicVo personBasic = personList.stream()
.filter(person -> personNo.equals(person.getPersonNo()))
.findAny()
.orElseThrow(() -> new NoSuchElementException("Person not found"));
return contactsList.stream()
.filter(contacts -> account.equals(contacts.getRelationshipAccount()))
.flatMap(contacts -> Stream.of(Map.of("name", personBasic.getName(), "remark", contacts.getRelationshipName())));
})
.collect(Collectors.toList());
List<PersonBasicVo> personVoList = personNoList.stream()
.map(personNo -> personList.stream()
.filter(person -> personNo.equals(person.getPersonNo()))
.findAny()
.orElseThrow(() -> new NoSuchElementException("Person not found")))
.collect(Collectors.toList());
String commonPersonName = getCommonPersonName(personList, account);
ContactsIntersectionVo contactsVo = new ContactsIntersectionVo();
contactsVo.setRemarks(remarkList);
contactsVo.setPersons(personVoList);
contactsVo.setCommonAccount(account);
contactsVo.setCommonPersonName(commonPersonName);
return contactsVo;
} else {
return null;
}
}, executor))
.collect(Collectors.toList());
contactisVoList.addAll(futureList.stream()
.map(CompletableFuture::join)
.filter(Objects::nonNull)
.collect(Collectors.toList()));
```
主要优化:
1. 使用流式编程,替换原来的for循环和entrySet遍历。
2. 使用`stream()`和`collect(Collectors.toList())`方法来收集结果,代替手动添加到列表中。
3. 使用`flatMap`方法来处理嵌套的列表。
4. 使用`orElseThrow`方法来处理可能找不到元素的情况,避免空指针异常。
5. 将lambda表达式内联,使代码更简洁。