亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 Optional.ifPresent 返回布爾值

如何使用 Optional.ifPresent 返回布爾值

子衿沉夜 2023-03-02 10:01:31
我在使用Optional.ifPresent語句時遇到了一些問題。我想減少的數量NullPointerExceptions,所以我決定使用Optional值。我也試圖避免if反模式的語句階梯。所以我實施了Optional.isPresent聲明。但這并不是我所期望的。請查看這些清單:這是我服務的一部分:    if (getAllComputerProducers().isPresent()) {        if (isComputerProducerAlreadyExist(computerProducer))            return new ResponseEntity<>(HttpStatus.CONFLICT);    }    computerProducerRepository.save(computerProducer);    return new ResponseEntity<>(HttpStatus.CREATED);getAllComputerProducers函數看起來像這樣:private Optional<List<ComputerProducer>> getAllComputerProducers() {    return Optional.ofNullable(computerProducerRepository.findAll());}如您所見,此函數Optional返回List.該isComputerProducerAlreadyExist功能是這樣實現的:private boolean isComputerProducerAlreadyExist(ComputerProducer computerProducer) {    return getAllComputerProducers()            .get()            .stream()            .anyMatch(producer -> producer.getProducerName()                    .equalsIgnoreCase(computerProducer.getProducerName()));}代碼太多了,我相信它可以變得更簡單。我的目標是將代碼縮減為一行命令,例如:getAllCimputerProducers().ifPresent(***and-here-some-anyMatch-boolean-function***)但我不能在那里插入一個返回某些東西的函數。我該怎么做?問候大家:)
查看完整描述

3 回答

?
不負相思意

TA貢獻1777條經驗 獲得超10個贊

你可以嘗試類似的東西


private boolean isComputerProducerAlreadyExist(ComputerProducer computerProducer){

    return this.getAllComputerProducers()

            .map((List<ComputerProducer> computerProducers) -> computerProducers.stream()

                    .anyMatch(producer -> producer.getProducerName().equalsIgnoreCase(computerProducer.getProducerName())))

            .orElse(Boolean.FALSE);

}

或者不是加載所有計算機生產商,而是只加載使用其名稱的計算機。


private boolean isComputerProducerAlreadyExist(ComputerProducer computerProducer){

    return computerProducerRepository.findByName(computerProducer.getProducerName()).isEmpty();

}

據我所知,Spring 還支持存儲庫的“存在”方法,甚至不需要加載實體。


查看完整回答
反對 回復 2023-03-02
?
慕桂英3389331

TA貢獻2036條經驗 獲得超8個贊

以下應該工作


Predicate<ComputerProducer> cpPredicate = producer -> producer.getProducerName()

    .equalsIgnoreCase(computerProducer.getProducerName());


boolean compProdExists = getAllCimputerProducers()

    .map(list -> list.stream()

        .filter(cpPredicate)

        .findFirst()))

    .isPresent();


查看完整回答
反對 回復 2023-03-02
?
楊__羊羊

TA貢獻1943條經驗 獲得超7個贊

您可以將 傳遞computerProducer.getProducerName()給存儲庫以獲取現有記錄。方法名稱將為 ' findByProducerName(String producerName)',如果 producerName 具有唯一約束,則返回類型將為Optional<ComputerProducer>, else Optional<List<ComputerProducer>>。但是,JPA 返回空列表而不是 null,因此不需要 optional on list。



查看完整回答
反對 回復 2023-03-02
  • 3 回答
  • 0 關注
  • 265 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號