有个逻辑不会写,看一下。就是对list集合加条件替换类型

有个逻辑不会写,帮忙看一下。就是对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);
    }
}

运行截图

img



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);
    }
}

結果為

img

不需要删除,只需要遍历找到房间信息,将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