国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

使用Java8的函數式接口簡化代碼

codeGoogle / 745人閱讀

摘要:前言由于這段時間使用的原因,很多東西都用了內部的來做,也沒關心底層怎么操作的。首先,我們看下這個內置的函數式接口中的方法,解釋為將給定的參數應用于該函數。開始愉快的編碼吧。本文代碼裝了逼趕緊逃。

前言

由于這段時間使用SpringBoot的原因,很多東西都用了SpringBoot內部的Template來做,也沒關心底層怎么操作的。最近忙里偷閑回答了幾個問題,正巧看到一個關于Redis資源釋放問題的,引起了我的興趣,便去看了下官方文檔。
Redis推薦的Java客戶端是jedis,關于Jedis的配置那些我就不說了,直接上他的示例代碼

You use it by:

/// Jedis implements Closeable. Hence, the jedis instance will be auto-closed after the last statement.
try (Jedis jedis = pool.getResource()) {
  /// ... do stuff here ... for example
  jedis.set("foo", "bar");
  String foobar = jedis.get("foo");
  jedis.zadd("sose", 0, "car"); jedis.zadd("sose", 0, "bike"); 
  Set sose = jedis.zrange("sose", 0, -1);
}
/// ... when closing your application:
pool.destroy();

If you can"t use try-with-resource, you can still enjoy with Jedis.close().

Jedis jedis = null;
try {
  jedis = pool.getResource();
  /// ... do stuff here ... for example
  jedis.set("foo", "bar");
  String foobar = jedis.get("foo");
  jedis.zadd("sose", 0, "car"); jedis.zadd("sose", 0, "bike"); 
  Set sose = jedis.zrange("sose", 0, -1);
} finally {
  // You have to close jedis object. If you don"t close then
  // it doesn"t release back to pool and you can"t get a new
  // resource from pool.
  if (jedis != null) {
    jedis.close();
  }
}
/// ... when closing your application:
pool.destroy();

If Jedis was borrowed from pool, it will be returned to pool with
proper method since it already determines there was
JedisConnectionException occurred. If Jedis wasn"t borrowed from pool,
it will be disconnected and closed.

也就是說要么用Java7的try-with-resource關閉資源,要么就try finally。
唉,又該有人吐槽Java又臭又長了,像老太婆的裹腳布一樣。
怎么辦呢?
我們可以寫一個方法把所有的redis操作包裝起來,里面加上資源釋放。
呃?工程量好像有點大,而且沒逼格。。。
想啊想啊想,能不能在執行Jedis方法的時候加上我們的代碼呢?比如在之前獲取連接池中的實例,在之后釋放資源。
咦,好像aop可以實現啊。
但是我就想用Java8的Lambda裝裝逼。

首先,我們看下這個Java內置的函數式接口中的apply方法,解釋為“將給定的參數應用于該函數”。

可以,正是我們需要的。
開始愉快的編碼吧。

第一步:

創建一個Maven工程,指定編譯版本和運行版本為jdk1.8,加入jedis依賴。

第二步:

編寫Jedis配置類。

import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class RedisConf {

    private static JedisPool pool;

    private RedisConf(){}

    static {
        pool = new JedisPool(new JedisPoolConfig(), "192.168.100.15",6379,60000,"密碼手動打碼",13);
    }

    public static JedisPool getJedisPool() {
        return pool;
    }
}
第三步:

編寫執行器

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import java.util.function.Function;

public class RedisActuator {

    private JedisPool jedisPool = RedisConf.getJedisPool();

    public   R execute(Function fun) {
        try (Jedis jedis = jedisPool.getResource()){
            return fun.apply(jedis);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}
第四步:

編寫測試代碼(Jedis官方文檔中的示例代碼)

import com.fanxian.redis.RedisActuator;
import java.util.Set;

public class App {
    public static void main( String[] args ) {

        RedisActuator redisActuator = new RedisActuator();

        redisActuator.execute(jedis -> jedis.set("foo", "bar"));

        String foobar = redisActuator.execute(jedis -> jedis.get("foo"));

        System.out.println(foobar);

        redisActuator.execute(jedis -> jedis.zadd("sose", 0, "car"));

        redisActuator.execute(jedis -> jedis.zadd("sose", 0, "bike"));

        Set sose = redisActuator.execute(jedis -> jedis.zrange("sose", 0, -1));

        System.out.println(sose);
    }
}

好像代碼也沒簡化多少。

本文代碼
:( 裝了逼趕緊逃。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/67977.html

相關文章

  • Java8實戰》-第三章讀書筆記(Lambda表達-01)

    摘要:之前,使用匿名類給蘋果排序的代碼是的,這段代碼看上去并不是那么的清晰明了,使用表達式改進后或者是不得不承認,代碼看起來跟清晰了。這是由泛型接口內部實現方式造成的。 # Lambda表達式在《Java8實戰》中第三章主要講的是Lambda表達式,在上一章節的筆記中我們利用了行為參數化來因對不斷變化的需求,最后我們也使用到了Lambda,通過表達式為我們簡化了很多代碼從而極大地提高了我們的...

    longshengwang 評論0 收藏0
  • Java8 之 lambda 表達、方法引用、函數接口、默認方、靜態方法

    摘要:歐陽思海繼承接口后,又加了新的抽象方法,這個接口就不再是函數式接口默認方法在接口中添加了一個默認方法。總結在這篇文章中,我們講了表達式方法引用函數式接口接口中的靜態方法接口中的默認方法的使用。 今天我來聊聊 Java8 的一些新的特性,確實 Java8 的新特性的出現,給開發者帶來了非常大的便利,可能剛剛開始的時候會有點不習慣的這種寫法,但是,當你真正的熟悉了之后,你一定會愛上這些新的...

    isLishude 評論0 收藏0
  • 樂字節-Java8新特性之方法引用

    摘要:上一篇小樂介紹了新特性函數式接口,大家可以點擊回顧。中引入方法引用新特性用于簡化應用對象方法的調用,方法引用是用來直接訪問類或者實例的已經存在的方法或者構造方法。方法引用是一種更簡潔易懂的表達式。 上一篇小樂介紹了《Java8新特性-函數式接口》,大家可以點擊回顧。這篇文章將接著介紹Java8新特性之方法引用。 Java8 中引入方法引用新特性,用于簡化應用對象方法的調用,?方法引用是...

    Codeing_ls 評論0 收藏0
  • Java8實戰》-第三章讀書筆記(Lambda表達-02)

    摘要:上下文比如,接受它傳遞的方法的參數,或者接受它的值得局部變量中表達式需要類型稱為目標類型。但局部變量必須顯示的聲明,或實際上就算。換句話說,表達式只能捕獲指派給它們的局部變量一次。注捕獲實例變量可以被看作捕獲最終局部變量。 由于第三章的內容比較多,而且為了讓大家更好的了解Lambda表達式的使用,也寫了一些相關的實例,可以在Github或者碼云上拉取讀書筆記的代碼進行參考。 類型檢查、...

    iflove 評論0 收藏0
  • Java8: Functional Interface and Lambda Expression

    摘要:寫在前面最近在看實戰感覺這本書的排版紙質內容真的都超級棒個人覺得這本書還是很值得一讀本文簡單或詳細介紹一下的和表達式函數式接口是在才開始引入的首先看一下普通接口和函數式接口的區別普通接口指的是一些具有相同屬性和行為的類的抽象函數式接口也是同 寫在前面: 最近在看,感覺這本書的排版,紙質,內容真的都超級棒,個人覺得這本書還是很值得一讀.本文簡單或詳細介紹一下Java8的Functiona...

    sunnyxd 評論0 收藏0

發表評論

0條評論

codeGoogle

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<