有个逻辑不会写,帮忙看一下。就是对list集合加条件替换类型。是在控制层
如下List集合,它调用了queryListByDate()方法,此方法是获取房间号码id跟type 类型。
roomid 是房间号 如 1001,1002,1003等
type为1跟2 ; 1为大房,2为小房
1001号是大房
这个逻辑是要不改数据库的情况下改type类型,把1001房间号改成小房
然后找资料说的需要迭代器弄,不太理解,求写下逻辑。
list获取1001号然后删掉再把1001号类型改成小房,不太理解怎么写。
List roomList = roomService.queryListByDate(roomid, type);
你是要改查询出来的数据,还是改数据库呢??如果循环中需要删除list的元素就用iterater
import java.util.ArrayList;
import java.util.ListIterator;
class Room{
private String roomid;//房间号
private int type;//类型
protected Room(String roomid, int type) {
this.roomid = roomid;
this.type = type;
}
public String getRoomid() {
return roomid;
}
public void setRoomid(String roomid) {
this.roomid = roomid;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
@Override
public String toString() {
return "RoomList [roomid=" + roomid + ", type=" + type + "]";
}
}
public class Answer7729426 {
public static void main(String[] args) {
ArrayList<Room> list = new ArrayList<Room>();
//以下为queryListByDate()返回值 为Room类型 我用new("roomid",type) 构造代替
list.add(new Room("1001",1));//大房
list.add(new Room("1002",1));//大房
list.add(new Room("1003",2));//小房
//修改前
System.out.println("修改前\n"+list);
//迭代器遍历 并修改
ListIterator<Room> it = list.listIterator();
while (it.hasNext()) {
Room temp = it.next();
if(temp.getType()==1)
temp.setType(2);
}
System.out.println("修改后\n"+list);
}
}
运行截图
package com.itheima.binarysearch;
import java.util.ArrayList;
import java.util.ListIterator;
/**
* @author : wentao
* @version : 1.0
*/
class Room{
private String roomid;//房间号
private int type;//类型
protected Room(String roomid, int type) {
this.roomid = roomid;
this.type = type;
}
public String getRoomid() {
return roomid;
}
public void setRoomid(String roomid) {
this.roomid = roomid;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
@Override
public String toString() {
return "RoomList [roomid=" + roomid + ", type=" + type + "]";
}
}
public class Demo111 {
public static void main(String[] args) {
ArrayList<Room> list = new ArrayList<Room>();
//以下为queryListByDate()返回值 为Room类型 我用new("roomid",type) 构造代替
list.add(new Room("1001",1));//大房 1001
list.add(new Room("1002",1));//大房 1002
list.add(new Room("1003",2));//小房 1003
//修改前
System.out.println("修改前\n"+list);
// 1.迭代器遍历 并修改
ListIterator<Room> it = list.listIterator();
while (it.hasNext()) {
Room temp = it.next();
//找到为1001的房间号 然后进行修改
if("1001".equals(temp.getRoomid()))
temp.setType(2);
}
// 2.foreach来遍历
// for (Room room : list) {
// //找到类型为1 的
// if ("1001".equals(room.getRoomid())){
// //将类型为1的修改成2即可
// room.setType(2);
// }
// }
// 3.for循环
// for (int i=0;i<list.size();i++){
// if ("1001".equals(list.get(i).getRoomid())){
// list.get(i).setType(2);
// }
// }
System.out.println("修改后\n"+list);
}
}
結果為
不需要删除,只需要遍历找到房间信息,将type 修改为2
List roomList = roomService.queryListByDate(roomid, type);
这句代码是查询数据库中的数据吧,数据库中的类型不改变?
问题解决了么
先用你的方法获取roomlist,然后可以用迭代器或者直接for循环遍历list,判断如果roomid=1001,则设置type =2。
完整代码如下
List<Room> roomList = roomService.queryListByDate(roomid, type);
Optional<Room> optional = roomList.stream().filter(r->r.getRoomId()==1001).findAny();
if(optional.isPresent()) {
roomList.get().setType(2);
}
如有帮助,请采纳,十分感谢!
写个for循环遍历一下,对取出的房间号进行判断是1001的类型改成小房间类型2。
遍历取出 所有的房间 手动set进去type
这个不需要是删除再添加,只需要直接修改就可以了
List<Room> roomList = roomService.queryListByDate(roomid, type);
List<Room> list = new ArrayList<>(roomList.size());
for(Room room:roomList){
if(room.id == 1001){
room.setType(2);
list.add(room);
}else{
list.add(room);}
}
return list;
原地改
List<Room> roomList = roomService.queryListByDate(roomid, type);
roomList.forEach( r -> {
if("1001".equals(r.getRoomid()) && r.getType() == 1 ){
r.setType(2);
}
});
mark