java 通过多个键查找集合的条目

mi7gmzs6  于 2023-06-28  发布在  Java
关注(0)|答案(1)|浏览(92)

我如何在java中存储数据,以便我可以通过任何存储的字段访问它,而不必多次存储数据?
假设我有一个这样的类:

class Fruit {
    String name;
    String Color;
    int count;
    //...
}

然后我得到了这个类的几个示例:

Fruit f1 = ("banana","yellow",4);
Fruit f2 = ("apple","red",2);
Fruit f3 = ("tomato","red",4);
//...

现在有没有什么方法可以存储这些数据,这样我就不仅可以得到水果的名字,而且还可以得到所有黄色的水果。还是所有的水果都是4
我也已经考虑过将java.util.ListStream.filter();结合使用,但我很确定有一些第三方库,它们的速度更快。我只是没能找到任何。

roejwanj

roejwanj1#

  • “我如何在java中存储数据,以便我可以通过任何存储的字段访问它,而不必多次存储数据?..."*

我不相信在Java中有任何固有的方法来做到这一点。
虽然,你不必多次存储它来实现效果。
如果有一个抽象,它很可能是 Collections 框架的一部分。
如果您想查看可用的接口,这里是到 JavaDoc 的链接。

我建议为每个查找创建一个单独的方法。
您可以使用 ArrayList 来存储数据。
这些将返回一个匹配列表,考虑到可能有多个结果-或 null,当没有找到匹配时。

List<Fruit> findName(String string, List<Fruit> list) {
    List<Fruit> results = new ArrayList<>();
    for (Fruit fruit : list) {
        if (fruit.name.equals(string)) results.add(fruit);
    }
    return results.size() == 0 ? null : results;
}

List<Fruit> findColor(String string, List<Fruit> list) {
    List<Fruit> results = new ArrayList<>();
    for (Fruit fruit : list) {
        if (fruit.Color.equals(string)) results.add(fruit);
    }
    return results.size() == 0 ? null : results;
}

List<Fruit> findCount(int value, List<Fruit> list) {
    List<Fruit> results = new ArrayList<>();
    for (Fruit fruit : list) {
        if (fruit.count == value) results.add(fruit);
    }
    return results.size() == 0 ? null : results;
}

这里有一个例子。

Fruit f1 = new Fruit("banana","yellow",4);
Fruit f2 = new Fruit("apple","red",2);
Fruit f3 = new Fruit("tomato","red",4);

List<Fruit> list = new ArrayList<>(List.of(f1, f2, f3));

System.out.println(findName("apple", list));
System.out.println(findColor("red", list));
System.out.println(findCount(4, list));

输出量

[apple]
[apple, tomato]
[banana, tomato]

相关问题