使用 Java Streams 对 json 对象进行攻击



我正在使用一个包含以下格式信息的 API:

[
{Key1: Value1,
 Key2: Value2A,
 Key3: Value3A,
 Key4: Value4A},
{Key1: Value1,
 Key2: Value2B,
 Key3: Value3B,
 Key4: Value4B},
{Key1: Value1,
 Key2: Value2C,
 Key3: Value3C,
 Key4: Value4C}
]

我正在尝试根据 Key3 的值获取 Key2 的值。我知道 Key2 的值是多少,但 Key3 的值是在运行时生成的。我想比较 Key2 的值,如果匹配,则返回该对象的 Key3 值。

在线通读后,我尝试使用流,但我无法获取整个对象或该特定值作为字符串。

这是我尝试过的,它绝对不返回任何内容:

public static String fetchCarModel(String value2A) {
    final Optional<CarModel> carModel =  Car.api().models().list().stream()
            .filter(r -> r.getKey().equals(value2A)) // Check for the correct object
            .findAny();
    return carModel.get().getId();
}

感谢您的帮助。

似乎对

Car.api().models().list() 的调用返回了一个List<CarModel>,其中CarModel具有上述四个属性。

在这种情况下,要达到上述要求,您可以执行以下操作:

public static String fetchCarModel(String value2A) {    
    final Optional<CarModel> carModel =  Car.api().models().list().stream()
            .filter(carModel -> carModel.getKey2().equals(value2A)) // Check for the correct object
            .findAny();   
    return carModel.get().getKey3(); // get the value of this property
}

请注意,仅当您确定Optional<T>中存在值时,才应调用Optional.get()否则,如果存在,最好利用orElseorElseGet来解包该值,否则提供默认值。

理想情况下,更好的方法是更改方法签名以返回Optional<String>,然后让此 API 的调用方决定在无值情况下要执行的操作。

  • 有关更多详细信息,请参阅 Optional<T> API。
  • 如果您不熟悉Optional<T>类型,请参阅这篇关于它的文章。

最新更新