当前位置: 首页 > 知识库问答 >
问题:

根据对象的成员属性之一在对象列表中查找对象[重复]

窦英武
2023-03-14

假设我有一个名为House的对象,它包含一个列表

public class House {

private List<Room> roomsList;

public House(List<Room> rooms) {
    roomsList = rooms;
}

/*Getter and Setter*/
...

对于房间,只有一个属性,其值由int表示:

public calss Room {

private int color;

public Room(int c) {
    color = c;
}

/*Getter and Setter*/
...

现在,使用Java8,并给出一个带有List的对象House

Room myRoom = house.getRooms.stream().filter(r -> r.getColor() == color).findFirst().orElse(null);

我希望能够做的是,给定一个列表

为了清楚起见,对于我的用例:

>

每家房子都有一份清单

每个房间都有其属性集;

房子里的每个房间都有独特的颜色

最有可能(但不一定)只有一个房子,具有给定颜色的房间

我可以这样做:

List<House> houseList = /*a given list of houses*/
int c = 4;

House myHouse = null;

for (House house : houseList) {
    List<Room> rooms = house.getRooms();
    Room roomOfRightColor = house.getRooms.stream().filter(r -> r.getColor() == color).findFirst().orElse(null);
    if (room != null) {
        myHouse = house;
        break;
    }

if (myHouse == null) {
/*Handle null*/
}

return myHouse;

但是也许有更聪明和/或更直接的方法来做到这一点?


共有1个答案

西门胜涝
2023-03-14

我可以想象以前有人问过类似的问题,技巧是接下来的过滤操作:

private static Optional<House> test() {
    List<House> houseList = Arrays.asList(
            new House(new Room(1), new Room(3)),
            new House(new Room(5))
    );
    int color = 5;

    return houseList.stream()
            .filter(h -> h.getRooms()
                    .stream()
                    .anyMatch(r -> r.getColor() == color))
            .findFirst();
}

因此,在过滤器内部有第二个匹配项,用于检查内部列表。我确实将其更改为返回一个可选值,而不是null,但可以随意应用对您有效的内容。

 类似资料:
  • 给定以下JSON结构,我希望能够在数组,其中包含具有特定。 假设我正在寻找带有的条目——在这种情况下,我想提取完整的对象: 我尝试嵌套过滤器,但没有成功: 我可以很容易地通过,但是我想实际上检索它的父对象!这在JSONPath中可能吗?

  • 我有一个对象列表,我需要按其中一个对象属性对其进行排序。 我可以用下面的代码按升序排序 但是,这是按升序排序列表,而我需要做的是按降序排序。在对对象列表进行排序时,这可能吗?

  • 问题内容: 我想使用Java 8技巧在一行中执行以下操作。 给定此对象定义: 和a ,我想得到a ,它是第一个列表中所有s对象的列表- 顺序相同。 我可以使用Java中的循环来做到这一点,但我相信Java8中应该有一个单行lambda可以做到这一点。我无法在线找到解决方案。也许我没有使用正确的搜索词。 有人可以为这种转换建议一个lambda或另一种线吗? 问题答案: 这应该可以解决问题: 也就是说

  • 我可以在Java中使用循环来实现这一点,但我认为在Java8中应该有一个一行程序lambda来实现这一点。我无法在网上找到解决方案。也许我没有使用正确的搜索词。 有人能为这个转换提出一个lambda或另一个一行程序吗?

  • 我试图排序基于一个nullable ArrayList在java 8列表。 列表如下 我正在尝试使用streams sort根据患者就诊日期(就诊列表中的第一个元素)的降序对患者对象进行排序。空值应该放在最后。最终结果必须是 我尝试过以下方法,但即使在空检查之后,也会出现空指针异常。

  • 问题内容: jsfiddle http://jsfiddle.net/KfSBq/ 所谓子对象,是指我用ng-repeat显示的所有对象在其内部都包含一个对象列表,并且我希望根据这些子对象之一的属性进行过滤。 仅此一项就非常简单。我有个对象,每个对象都包含和对象列表: 我按类别显示它们: 我的问题是现在仍然显示不包含任何条目的日常对象。如何实现一种情况,如果过滤使列表为空,则该列表也不显示? 问题