使用Java Streams构建json对象

时间:2018-04-05 22:16:02

标签: java java-stream

我正在使用包含以下格式信息的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}
]

我试图根据Key2的值获取Key3的值。我知道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();
}

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

似乎对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.get()中存在值,则应该只调用Optional<T>,否则最好利用orElseorElseGet解包如果存在,则值提供默认值。

理想情况下,更好的方法是更改​​方法签名以返回Optional<String>,然后让此API的调用者决定在无值的情况下做什么。

  • 有关详细信息,请参阅Optional<T> API。
  • 如果您不熟悉Optional<T>类型,请参阅此帖子。