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

在对象的arraylist的特定属性中搜索

危卜鹰
2023-03-14

我有一个对象的arraylistarraylist List Tile有新瓷砖的属性(“color”,value)我想创建一个搜索函数,在这里我迭代遍历瓷砖的每个colour属性和arraylist中每个颜色内的每个value属性(就像每个循环的嵌套),有没有一种简单的方法可以做到这一点?

共有1个答案

曹恩
2023-03-14

假设tile类有两个属性stringcolourintvalue。它有一个ToString(java.lang.Object Class的重写方法),如下所示:

@Override public String toString() {
    return colour + ":" + value;
}

制作一些瓷砖:

Tile t1 = new Tile("red", 7); // constructor takes a colour and a value
Tile t2 = new Tile("red", 2);
Tile t3 = new Tile("blue", 9);
Tile t4 = new Tile("white", 17);
Tile t5 = new Tile("blue", 3);
Tile t6 = new Tile("red", 15);
Tile t7 = new Tile("white", 10);


方案1:

private static List<Tile> getTilesWithColor1(List<Tile> tilesList, String searchColor) {
    return tilesList.stream()
                     .filter(tile -> tile.getColour().equals(searchColor))
                     .collect(Collectors.toList());
}

private static List<Tile> getTilesWithColor2(List<Tile> tilesList, String searchColor) {
    List<Tile> result = new ArrayList<>();
    for (Tile t : tilesList) {
        if (t.getColour().equals(searchColor)) {
            result.add(t);
        }
    }
    return result;
}
    null

我想做一个搜索函数,在这里我迭代遍历Tile的每个颜色属性和arraylist中的每个颜色中的每个值属性(就像嵌套的for each循环),有没有一个简单的方法可以做到这一点呢?

您可以更改此函数以添加附加条件或过滤器以获得所需的结果。


方案2:

private static Map<String, List<Integer>> getTileColorsAndValues(List<Tile> tilesList) {
    return tilesList.stream()
                     .collect(Collectors.groupingBy(Tile::getColour,
                         Collectors.mapping(Tile::getValue, Collectors.toList())));
}
    null
List<Integer> valuesList = map.get("red");


方案3:

按颜色获取所有瓷砖:

private static Map<String, List<Tile>> getTilesByColorsAndValues(List<Tile> tilesList) {
    return tilesList.stream()
                    .collect(Collectors.groupingBy(Tile::getColour));
}
  • 输入:TilesList
  • 输出:{red=[red:7,red:2,red:15],white=[white:17,white:10],blue=[blue:9,blue:3]}
List<Tile> tilesList = map.get("red");

示例的代码:

import java.util.*;
import java.util.stream.*;
import java.util.function.*;

public class TilesExample {

    public static void main(String [] args) {

        Tile t1 = new Tile("red", 7);
        Tile t2 = new Tile("red", 2);
        Tile t3 = new Tile("blue", 9);
        Tile t4 = new Tile("white", 17);
        Tile t5 = new Tile("blue", 3);
        Tile t6 = new Tile("red", 15);
        Tile t7 = new Tile("white", 10);
        List<Tile> tilesList = Arrays.asList(t1, t2, t3, t4, t5, t6, t7);

        System.out.println(getTilesWithColor1(tilesList, "red"));
        System.out.println(getTilesWithColor2(tilesList, "red"));

        System.out.println(getTileColorsAndValues(tilesList));

        System.out.println(getTilesByColorsAndValues(tilesList));
    }

    private static Map<String, List<Tile>> getTilesByColorsAndValues(List<Tile> tilesList) {
        return tilesList.stream()
                        .collect(Collectors.groupingBy(Tile::getColour));
    }

    private static Map<String, List<Integer>> getTileColorsAndValues(List<Tile> tilesList) {
        return tilesList.stream()
                        .collect(Collectors.groupingBy(Tile::getColour,
                            Collectors.mapping(Tile::getValue, Collectors.toList())));
    }

    private static List<Tile> getTilesWithColor1(List<Tile> tilesList, String searchColor) {
        return tilesList.stream()
                         .filter(tile -> tile.getColour().equals(searchColor))
                         .collect(Collectors.toList());
    }

    private static List<Tile> getTilesWithColor2(List<Tile> tilesList, String searchColor) {
        List<Tile> result = new ArrayList<>();
        for (Tile t : tilesList) {
            if (t.getColour().equals(searchColor)) {
                result.add(t);
            }
        }
        return result;
    }
}
 类似资料:
  • 问题内容: 我有一堂课。它具有以下特征; 它具有2个属性,和。1个人可以拥有许多电话,因此您可能会在下面看到具有多个ID的人。 还有另一门课叫。它将有一个称为的方法。 personList,具有3-4个Person对象。我需要搜索PersonArrayList并找到与Person对象匹配的对象。我怎样才能做到这一点? 注意:我尝试过。但这是行不通的。 问题答案: 我尝试了personList.co

  • 我试图根据用户输入找到一个特定的对象。用户需要输入姓名和性别,然后程序应该搜索ArrayList,查看是否有匹配的姓名和性别。ArrayList中的对象有3个实例变量,但程序只搜索2个。如何在ArrayList中只搜索选定的几个特征? 在我的项目中,我有: 其中,nameList是ArrayList的名称,getName()是返回存储在对象中的名称的方法的名称,getGender()是返回存储在对

  • 我有一个带有自定义对象的ArrayList。我想在这个ArrayList中搜索字符串。 因此,我希望有一个函数在我的ArrayList中搜索所有的“name”字符串,例如5个对象。

  • 对于我当前的项目,我必须搜索ArrayList of ZipCode对象,以便找到距离用户输入的int zip最远的ZipCode。 下面是编写我遇到问题的方法的说明:public ZipCode findfurtwest(int-pZip)-查找距离提供的邮政编码最远的ZipCode。如果未找到邮政编码,则返回null。例如,距离邮政编码75234最远的是ADAK,AK 99546。 在我的代码

  • 问题内容: 我有一个包含许多对象的ArrayList。我想对相同属性名称的值进行求和。 示例数据为 ProfitAndLossDataDO的* 对象 * 结果将是(人相同时的值总和)- 逻辑类 ProfitAndLossDataDO 谢谢 问题答案: 我会遍历列表并将结果收集在地图中: 编辑: Java 8对接口的增强使我们能够以一种稍微更优雅的方式来实现此方法,中间是令人讨厌的代码块:

  • 问题内容: 我有一个包含许多对象的ArrayList。我想对相同属性名称的值进行求和。 示例数据为 ProfitAndLossDataDO的* 对象 * 结果将是(人相同时的值总和)- 逻辑类 ProfitAndLossDataDO 谢谢 问题答案: 我会遍历列表并将结果收集在地图中: 编辑: Java 8对接口的增强使我们能够以一种稍微更优雅的方式来实现此方法,中间是令人讨厌的代码块: