需要筛选2个列表&;在java中添加到seprate列表中

需要筛选2个列表&;在java中添加到seprate列表中,java,list,arraylist,Java,List,Arraylist,我有两份清单: AvailableRoomType-[标准,超豪华] wholeRoomtype-[标准型、超豪华型、豪华型] 我需要对此进行筛选并添加到单独的列表中不可用的RoomType-[Deluxe] for(int j = 0; j < avaliableRoomType.size() ; j++) { for(int i = 0; i < wholeRoomtype.size(); i++) { String tempA

我有两份清单:

  • AvailableRoomType
    -[标准,超豪华]
  • wholeRoomtype
    -[标准型、超豪华型、豪华型]
我需要对此进行筛选并添加到单独的列表中
不可用的RoomType
-[Deluxe]

for(int j = 0; j <  avaliableRoomType.size()  ; j++) {

        for(int i = 0; i < wholeRoomtype.size(); i++) {

            String tempAv = avaliableRoomType.get(j);
            String tempHotelRoomId = wholeRoomtype.get(i);

            if(!tempAv.equals(tempHotelRoomId)){


            unavailableRoomtype.add(tempHotelRoomId);


            }

        }

    }
for(int j=0;j

但是我有重复的值。

如果您不想有重复的值,请构造一个新值,然后将其转换回:

List List=newarraylist(set);
列出不可用的RoomType=new ArrayList();
用于(字符串roomType:wholeRoomtype){
如果(!AvailableRoomType.contains(roomType)){
不可用的roomType.add(roomType);
}
}

在这里,您可以检查此类型是否已添加到unavailableRoomtype列表中。如果已经添加了,您什么也不做。

我建议使用
Set
s而不是
List
s:

Set<String>   roomTypes;        
Set<RoomType> availableRoomType;
Set<RoomType> unavailableRoomType;
设置房间类型;
设置availableRoomType;
设置不可用的房间类型;


实施示例

public static void main(String[] args) {
    final Set<String> roomTypes           = new LinkedHashSet<>();
    final Set<String> availableRoomType   = new LinkedHashSet<>();
    final Set<String> unavailableRoomType = new LinkedHashSet<>();

    roomTypes.add("Standard");
    roomTypes.add("Deluxe");
    roomTypes.add("SuperDeluxe");
    // .. other entries

    // determine what room types are available
    availableRoomType.add("Standard");
    availableRoomType.add("SuperDeluxe");


    // your filtering for unavailable room types
    roomTypes.stream()
            .filter(e -> !availableRoomType.contains(e))
            .forEach(unavailableRoomType::add);


    System.out.printf("Available room types:\n");
    availableRoomType.forEach(System.out::println);

    System.out.printf("\nUnavailable room types:\n");
    unavailableRoomType.forEach(System.out::println);
}
publicstaticvoidmain(字符串[]args){
最终设置roomTypes=新LinkedHashSet();
最终设置availableRoomType=新LinkedHashSet();
最终设置不可用RoomType=新建LinkedHashSet();
房间类型。添加(“标准”);
房间类型。添加(“豪华”);
房间类型。添加(“超级豪华”);
//…其他条目
//确定可用的房间类型
添加(“标准”);
availableRoomType.add(“超级豪华”);
//筛选不可用的房间类型
roomTypes.stream()
.filter(e->!availableRoomType.contains(e))
.forEach(不可用的RoomType::add);
System.out.printf(“可用房间类型:\n”);
availableRoomType.forEach(System.out::println);
System.out.printf(“\n可用房间类型:\n”);
不可用的RoomType.forEach(System.out::println);
}
输出为

public static void main(String[] args) {
    final Set<String> roomTypes           = new LinkedHashSet<>();
    final Set<String> availableRoomType   = new LinkedHashSet<>();
    final Set<String> unavailableRoomType = new LinkedHashSet<>();

    roomTypes.add("Standard");
    roomTypes.add("Deluxe");
    roomTypes.add("SuperDeluxe");
    // .. other entries

    // determine what room types are available
    availableRoomType.add("Standard");
    availableRoomType.add("SuperDeluxe");


    // your filtering for unavailable room types
    roomTypes.stream()
            .filter(e -> !availableRoomType.contains(e))
            .forEach(unavailableRoomType::add);


    System.out.printf("Available room types:\n");
    availableRoomType.forEach(System.out::println);

    System.out.printf("\nUnavailable room types:\n");
    unavailableRoomType.forEach(System.out::println);
}
可用房间类型:
标准
超级豪华

不可用的房间类型:
豪华型


在您的场景中,您可以使用
list.contains(roomType)
来验证列表中是否已有项目。另外,如果你不想要复制品,你可以使用SetI。我不明白你想实现什么。。。我真的不知道你的列表包含什么,但我想你最终会得到这两个列表的并集。@Vakh-yep我得到了另一个词messup中的并集,而不是filter this-yep,但实际上这些列表元素来自DB@Yasa我编辑了我的帖子以满足你的需要。但一般来说,我建议创建一个自己的类(
RoomManager
e.g.),其中包含房间类型逻辑。如果你需要一些提示,请告诉我。
Set<String>   roomTypes;        
Set<RoomType> availableRoomType;
Set<RoomType> unavailableRoomType;
public static void main(String[] args) {
    final Set<String> roomTypes           = new LinkedHashSet<>();
    final Set<String> availableRoomType   = new LinkedHashSet<>();
    final Set<String> unavailableRoomType = new LinkedHashSet<>();

    roomTypes.add("Standard");
    roomTypes.add("Deluxe");
    roomTypes.add("SuperDeluxe");
    // .. other entries

    // determine what room types are available
    availableRoomType.add("Standard");
    availableRoomType.add("SuperDeluxe");


    // your filtering for unavailable room types
    roomTypes.stream()
            .filter(e -> !availableRoomType.contains(e))
            .forEach(unavailableRoomType::add);


    System.out.printf("Available room types:\n");
    availableRoomType.forEach(System.out::println);

    System.out.printf("\nUnavailable room types:\n");
    unavailableRoomType.forEach(System.out::println);
}