欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java8 filter方法、Predicate接口的使用方式

 更新時(shí)間:2024年07月15日 10:13:27   作者:chushiyunen  
這篇文章主要介紹了java8 filter方法、Predicate接口的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

java8 filter方法、Predicate接口使用

filter方法在stream中起到過(guò)濾的作用,可以鏈?zhǔn)讲僮?,不是terminal操作。

Predicate是一個(gè)接口,接口方法是test(),返回boolean值.

Predicate常和stream的filter配合使用,實(shí)現(xiàn)過(guò)濾。

可以多條件組合過(guò)濾,如代碼:

public static void main(String[] args) {
    List<String> names = Arrays.asList("張三豐", "張翠山", "張無(wú)忌","金毛獅王","趙敏");

    // 張開(kāi)頭的
    Predicate<String> zhang=(n)->n.startsWith("張"); //
    // 含三豐的
    Predicate<String> sanfeng=(n)->n.contains("三豐");
    // 王結(jié)尾的
    Predicate<String> wang=(n)->n.endsWith("王");
    sanfeng.equals("金毛");

    //Predicate常和stream的filter配合使用,實(shí)現(xiàn)過(guò)濾
    //和filter結(jié)合用 默認(rèn)調(diào)用的是test()方法 姓張的
    names.stream().filter(zhang).forEach(n-> System.out.println(n));

    //and()  姓張的,含三豐的
    names.stream().filter(zhang.and(sanfeng)).forEach(n-> System.out.println(n));

    //or()  張開(kāi)頭的,或者 王結(jié)尾的
    names.stream().filter(zhang.or(wang)).forEach(n-> System.out.println(n));

    //negate() 不是張開(kāi)頭的,但是王結(jié)尾的
    names.stream().filter(zhang.negate().and(wang)).forEach(n-> System.out.println(n));

    // equals() 方法還沒(méi)懂什么意思
}

斷言Predicate和過(guò)濾器(Filter)

Predicate斷言又稱(chēng)謂詞,用于條件判斷,只有斷言結(jié)果都為真,才會(huì)真正的執(zhí)行路由。斷言本質(zhì)是定義路由轉(zhuǎn)發(fā)的條件。

時(shí)間判斷有三種:

  • 1) AfterRoutePredicateFactory:判斷請(qǐng)求日期是否晚于指定日期
  • 2) BeforeRoutePredicateFactory:判斷請(qǐng)求日期是否早于指定日期
  • 3) BetweenRoutePredicateFactory:判斷請(qǐng)求日期是否在指定時(shí)間段內(nèi)

例:-After=2020-12-31T23:59:59.789+08:00[Asia/Shanghai]---表示在2020.12.31.之后可以進(jìn)行訪(fǎng)問(wèn)

Method:表示請(qǐng)求方式,如果跟寫(xiě)的請(qǐng)求方式不同,那么就會(huì)判斷false,從而不能訪(fǎng)問(wèn)成功。

過(guò)濾器(Filter)

過(guò)濾器(filter)就是在請(qǐng)求傳遞過(guò)程中,對(duì)請(qǐng)求和響應(yīng)做一個(gè)處理,Gateway的Filter從作用范圍可分為兩種:GatewayFilter與GlobalFilter。

  • (1)、GatewayFilter:應(yīng)用在單個(gè)路由或者一個(gè)分組的路由上
  • (2)、GlobalFilter:應(yīng)用到所有的路由上。

配置的話(huà)寫(xiě)在配置文件中。在spring-cloud-gatewa下面。

限流設(shè)計(jì)

網(wǎng)關(guān)是所有外部請(qǐng)求的公共入口,所以可以在網(wǎng)關(guān)進(jìn)行限流,而且限流方式有很多,我們采用sentinel組件來(lái)實(shí)現(xiàn)網(wǎng)關(guān)的限流。

進(jìn)行限流設(shè)計(jì):

1、添加依賴(lài):

添加spring-cloud-starter-gateway spring-cloud-starter-alibaba-sentinel
spring-cloud-alibaba-sentinel-gateway

2、添加sentinel和路由規(guī)則。

  • 路由配置
routes:
- id: route01
uri: lb://sca-provider
predicates: ###匹配規(guī)則
- Path=/provider/echo/**
  • sentinel配置
sentinel:
transport:
dashboard: localhost:8180 #Sentinel 控制臺(tái)地址
eager: true #取消Sentinel控制臺(tái)懶加載,即項(xiàng)目啟動(dòng)即連接

3、啟動(dòng)網(wǎng)關(guān)項(xiàng)目,檢測(cè)sentinel控制臺(tái)的網(wǎng)關(guān)菜單。

啟動(dòng)時(shí),添加sentinel的jvm參數(shù),通過(guò)此菜單可以讓網(wǎng)關(guān)服務(wù)在sentinel控制臺(tái)顯示不一樣的菜單,代碼如下:

-Dcsp.sentinel.app.type=1

sentinel控制臺(tái)啟動(dòng)后,界面是

4、在sentinel面板中設(shè)置限流策略。

前端排錯(cuò):使用debugger是設(shè)置斷點(diǎn)

練習(xí)/總結(jié):

微服務(wù)架構(gòu)下Ajax請(qǐng)求響應(yīng)實(shí)踐。

流程圖如下:

首先是在一個(gè)網(wǎng)頁(yè)里設(shè)置一個(gè)點(diǎn)擊按鈕,點(diǎn)擊后發(fā)送Ajax訪(fǎng)問(wèn)請(qǐng)求,轉(zhuǎn)給網(wǎng)關(guān)服務(wù),然后再由網(wǎng)關(guān)轉(zhuǎn)給服務(wù)類(lèi)。服務(wù)類(lèi)獲取到參數(shù),再轉(zhuǎn)給網(wǎng)關(guān),網(wǎng)關(guān)再傳給網(wǎng)頁(yè),并將數(shù)據(jù)顯示在網(wǎng)頁(yè)中。

  • 1、創(chuàng)建ui網(wǎng)頁(yè)工程----先導(dǎo)入依賴(lài)spring-boot-stater-web依賴(lài)。
  • 2、創(chuàng)建啟動(dòng)類(lèi)
  • 3、在resource文件夾下的創(chuàng)建一個(gè)HTML文件,使用Ajax請(qǐng)求,需要導(dǎo)入js文件。

js文件要在static目錄下添加。如圖

兩種添加方式

cdn:---直接使用網(wǎng)上的js文件--網(wǎng)速好的話(huà)。

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

第二種:下載下來(lái)放到j(luò)s文件夾下

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>
<h2>The Index Page</h2>
<button οnclick="doBuy()">Buy</button>
<span id="result"></span>
</div>
<!--
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
-->
<script src="/js/axios.min.js"></script>
<script>
//前端如何排錯(cuò)(日志,debugger,排除)
function doBuy(){
console.log("==doBuy==");
//1.基于axios框架發(fā)送異步ajax請(qǐng)求
let url="http://localhost:9000/nacos/provider/echo/1"
let span=document.getElementById("result");
axios.get(url)

.then(function (response) {//請(qǐng)求ok,執(zhí)行then
console.log(response.data);
//2.將響應(yīng)結(jié)果更新到頁(yè)面上
span.innerHTML = response.data
})
.catch(function (error) {
debugger //設(shè)置斷點(diǎn)
//console.log(error);
if(error.response.status==429){
span.innerHTML = error.response.statusText;
}
});

}
</script>
</body>
</html>
  • 4、 在sca-gateway的配置文件中添加跨域設(shè)置
spring:
cloud:
gateway:
globalcors: #跨域配置
cors-configurations:
'[/**]':
allowedOrigins: "*"
allowedMethods: "*"
  • 5、啟動(dòng)服務(wù)進(jìn)行測(cè)試。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 關(guān)于MyBatis結(jié)果映射的實(shí)例總結(jié)

    關(guān)于MyBatis結(jié)果映射的實(shí)例總結(jié)

    結(jié)果集映射主要是為了解決屬性名和類(lèi)型名不一致的問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于MyBatis結(jié)果映射的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • Servlet中/和/*的區(qū)別詳解

    Servlet中/和/*的區(qū)別詳解

    本文將分析/和/*的區(qū)別這個(gè)老生常談的問(wèn)題,但是很多時(shí)候看完就忘了,關(guān)于此問(wèn)題這一篇文章就夠了,它將成為你的永久記憶,感興趣的可以了解一下
    2021-07-07
  • Spring MVC攔截器和跨域請(qǐng)求使用詳解

    Spring MVC攔截器和跨域請(qǐng)求使用詳解

    SpringMVC的攔截器也是AOP思想的一種實(shí)現(xiàn)方式,主要用于攔截用戶(hù)的請(qǐng)求并做相應(yīng)的處理,通常應(yīng)用在權(quán)限驗(yàn)證、記錄請(qǐng)求信息的日志、判斷用戶(hù)是否登錄等功能上,這篇文章主要介紹了Spring MVC攔截器和跨域請(qǐng)求,需要的朋友可以參考下
    2023-07-07
  • 解決java頁(yè)面URL地址傳輸參數(shù)亂碼的方法

    解決java頁(yè)面URL地址傳輸參數(shù)亂碼的方法

    這篇文章主要介紹了解決java頁(yè)面URL地址傳輸參數(shù)亂碼的方法,URL地址參數(shù)亂碼問(wèn)題,算是老話(huà)重談了吧!需要的朋友可以參考下
    2015-09-09
  • Java編寫(xiě)實(shí)現(xiàn)九宮格應(yīng)用

    Java編寫(xiě)實(shí)現(xiàn)九宮格應(yīng)用

    這篇文章主要為大家詳細(xì)介紹了Java編寫(xiě)實(shí)現(xiàn)九宮格應(yīng)用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Java中的split使用方法詳解

    Java中的split使用方法詳解

    這篇文章主要介紹了Java中的split使用方法詳解,Java 中 String 的 split 方法可以將字符串根據(jù)指定的間隔進(jìn)行切割,經(jīng)過(guò)切割后得到的返回值是一個(gè)字符串?dāng)?shù)組,需要的朋友可以參考下
    2023-10-10
  • 基于Mock測(cè)試Spring MVC接口過(guò)程解析

    基于Mock測(cè)試Spring MVC接口過(guò)程解析

    這篇文章主要介紹了基于Mock測(cè)試Spring MVC接口過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Spring Cloud下實(shí)現(xiàn)用戶(hù)鑒權(quán)的方案

    Spring Cloud下實(shí)現(xiàn)用戶(hù)鑒權(quán)的方案

    Java下常用的安全框架主要有Spring Security和shiro,都可提供非常強(qiáng)大的功能,但學(xué)習(xí)成本較高。但在微服務(wù)下鑒權(quán)又會(huì)對(duì)服務(wù)有一定的入侵性。 因此,本文將介紹Spring Cloud下實(shí)現(xiàn)用戶(hù)鑒權(quán)的方案,感興趣的同學(xué)可以關(guān)注一下
    2021-11-11
  • 使用spring stream發(fā)送消息代碼實(shí)例

    使用spring stream發(fā)送消息代碼實(shí)例

    這篇文章主要介紹了使用spring stream發(fā)送消息代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • 聊聊Spring循環(huán)依賴(lài)三級(jí)緩存是否可以減少為二級(jí)緩存的情況

    聊聊Spring循環(huán)依賴(lài)三級(jí)緩存是否可以減少為二級(jí)緩存的情況

    這篇文章主要介紹了聊聊Spring循環(huán)依賴(lài)三級(jí)緩存是否可以減少為二級(jí)緩存的情況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02

最新評(píng)論