【问题标题】:How can i check and return if there is value in a list with values in JSON format in javajava - 我如何检查并返回Java中JSON格式值的列表中是否存在值
【发布时间】:2021-10-10 09:23:30
【问题描述】:

我想看看我的 List 中是否有 live67 参数,我看过其他关于如何查看 List 中是否有值的帖子,但是我的列表中有 JSON 格式的值,它对我不起作用。之后我想返回 3da2f0db339742f257ecbe737855cd6e -> test67 的值。

我试试:

streamService.getAllStreams().contains("test67")

我的清单:

[
    {
        "key": "3da2f0db339742f257ecbe737855cd6e",
        "streamName": "test67"
    },
    {
        "key": "35ad38ffb46c2ba97306ca931e003481",
        "streamName": "test68"
    }
]

在streamDao类中:

public List<Stream> selectAllStreams();

在流服务中:

public List<Stream> getAllStreams(){
        return streamDao.selectAllStreams();
    }

在流控制器中:

@GetMapping("/getList")
public List<Stream> getAllStreams(){
    if(streamService.getAllStreams().contains("test67")){
    return streamService.getAllStreams();
    }
    else{
        return null;
    }
}

总是为空

这是我的 Stream 类:

public class Stream {

    String key;
    String streamName;

    public Stream(String streamName, String key){

        this.streamName = streamName;
        this.key = key;
    }

    public String getKey() {
        return key;
    }

    public String getStreamName() {
        return streamName;
    }

}

【问题讨论】:

  • Stream 的列表永远不会包含任何String。您需要测试您的列表是否包含流名称为 "test67" 的流,而不是您的列表直接包含字符串 "test67",因为这是不可能的。
  • 你应该声明Stream.toString()。也许List.contains() 会使用Object.toString() 来搜索对象。
  • 我应该在哪里申报?
  • 我在下面添加了答案,但我没有测试它,对不起。

标签: java list contains


【解决方案1】:

看看java流api

public List<Stream> getAllStreams(){
    var optionalStream = streamService.getAllStreams().stream()
       .filter(str -> str.getStreamName().equals("test67")).findFirst();

    if (optionalStream.isPresent()) {
         return streamDao.selectAllStreams();
         // return optionalStream.get().getKey(); To return the Key value of stream test67
    }
    return null;
}

【讨论】:

  • @Saurabh Jhunjhunwala,你让我的代码不正确
  • 谢谢!!我还想问一下如何返回streamName“test67”的键值是3da2f0db339742f257ecbe737855cd6e?
  • 类似,当它找到值“test67”时返回它的键值,而不是streamDao.selectAllStreams();
  • 获取键值使用return optionalStream.get().getKey()。但是,请告知自己有关 java 流和可选项的信息,以便您真正了解如何使用它们;)
  • 是的,我知道我只是在阅读它以了解您所写的内容,再次感谢您:)
【解决方案2】:

解决这个问题的最快方法,请覆盖toString()方法。

public class Stream {

    String key;
    String streamName;

    public Stream(String streamName, String key){

        this.streamName = streamName;
        this.key = key;
    }

    public String getKey() {
        return key;
    }

    public String getStreamName() {
        return streamName;
    }

/// override toString()
    @Override
    public String toString() {
        return getStreamName();
    }

}

事实上,Object.toString() 用于验证所有其他外部库类中的对象。
因此,返回 toString() 的唯一值,其中包含对象的所有属性 - 这是一种常规方式。

但在你的情况下,这是最快的方法。

或者你需要实现List.contains()的替代方法。

【讨论】:

    猜你喜欢
    • 2020-03-31
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    • 2021-05-15
    • 2012-06-18
    • 2018-02-08
    • 2023-01-24
    相关资源
    最近更新 更多