java8 filter方法、Predicate接口的使用方式
java8 filter方法、Predicate接口使用
filter方法在stream中起到過濾的作用,可以鏈式操作,不是terminal操作。
Predicate是一個接口,接口方法是test(),返回boolean值.
Predicate常和stream的filter配合使用,實現(xiàn)過濾。
可以多條件組合過濾,如代碼:
public static void main(String[] args) {
List<String> names = Arrays.asList("張三豐", "張翠山", "張無忌","金毛獅王","趙敏");
// 張開頭的
Predicate<String> zhang=(n)->n.startsWith("張"); //
// 含三豐的
Predicate<String> sanfeng=(n)->n.contains("三豐");
// 王結(jié)尾的
Predicate<String> wang=(n)->n.endsWith("王");
sanfeng.equals("金毛");
//Predicate常和stream的filter配合使用,實現(xiàn)過濾
//和filter結(jié)合用 默認調(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() 張開頭的,或者 王結(jié)尾的
names.stream().filter(zhang.or(wang)).forEach(n-> System.out.println(n));
//negate() 不是張開頭的,但是王結(jié)尾的
names.stream().filter(zhang.negate().and(wang)).forEach(n-> System.out.println(n));
// equals() 方法還沒懂什么意思
}
斷言Predicate和過濾器(Filter)
Predicate斷言又稱謂詞,用于條件判斷,只有斷言結(jié)果都為真,才會真正的執(zhí)行路由。斷言本質(zhì)是定義路由轉(zhuǎn)發(fā)的條件。
時間判斷有三種:
- 1) AfterRoutePredicateFactory:判斷請求日期是否晚于指定日期
- 2) BeforeRoutePredicateFactory:判斷請求日期是否早于指定日期
- 3) BetweenRoutePredicateFactory:判斷請求日期是否在指定時間段內(nèi)
例:-After=2020-12-31T23:59:59.789+08:00[Asia/Shanghai]---表示在2020.12.31.之后可以進行訪問
Method:表示請求方式,如果跟寫的請求方式不同,那么就會判斷false,從而不能訪問成功。
過濾器(Filter)
過濾器(filter)就是在請求傳遞過程中,對請求和響應(yīng)做一個處理,Gateway的Filter從作用范圍可分為兩種:GatewayFilter與GlobalFilter。
- (1)、GatewayFilter:應(yīng)用在單個路由或者一個分組的路由上
- (2)、GlobalFilter:應(yīng)用到所有的路由上。
配置的話寫在配置文件中。在spring-cloud-gatewa下面。
限流設(shè)計
網(wǎng)關(guān)是所有外部請求的公共入口,所以可以在網(wǎng)關(guān)進行限流,而且限流方式有很多,我們采用sentinel組件來實現(xiàn)網(wǎng)關(guān)的限流。
進行限流設(shè)計:
1、添加依賴:
添加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 控制臺地址 eager: true #取消Sentinel控制臺懶加載,即項目啟動即連接
3、啟動網(wǎng)關(guān)項目,檢測sentinel控制臺的網(wǎng)關(guān)菜單。
啟動時,添加sentinel的jvm參數(shù),通過此菜單可以讓網(wǎng)關(guān)服務(wù)在sentinel控制臺顯示不一樣的菜單,代碼如下:
-Dcsp.sentinel.app.type=1


sentinel控制臺啟動后,界面是

4、在sentinel面板中設(shè)置限流策略。
前端排錯:使用debugger是設(shè)置斷點
練習(xí)/總結(jié):
微服務(wù)架構(gòu)下Ajax請求響應(yīng)實踐。
流程圖如下:

首先是在一個網(wǎng)頁里設(shè)置一個點擊按鈕,點擊后發(fā)送Ajax訪問請求,轉(zhuǎn)給網(wǎng)關(guān)服務(wù),然后再由網(wǎng)關(guān)轉(zhuǎn)給服務(wù)類。服務(wù)類獲取到參數(shù),再轉(zhuǎn)給網(wǎng)關(guān),網(wǎng)關(guān)再傳給網(wǎng)頁,并將數(shù)據(jù)顯示在網(wǎng)頁中。
- 1、創(chuàng)建ui網(wǎng)頁工程----先導(dǎo)入依賴spring-boot-stater-web依賴。
- 2、創(chuàng)建啟動類
- 3、在resource文件夾下的創(chuàng)建一個HTML文件,使用Ajax請求,需要導(dǎo)入js文件。
js文件要在static目錄下添加。如圖

兩種添加方式
cdn:---直接使用網(wǎng)上的js文件--網(wǎng)速好的話。
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
第二種:下載下來放到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>
//前端如何排錯(日志,debugger,排除)
function doBuy(){
console.log("==doBuy==");
//1.基于axios框架發(fā)送異步ajax請求
let url="http://localhost:9000/nacos/provider/echo/1"
let span=document.getElementById("result");
axios.get(url)
.then(function (response) {//請求ok,執(zhí)行then
console.log(response.data);
//2.將響應(yīng)結(jié)果更新到頁面上
span.innerHTML = response.data
})
.catch(function (error) {
debugger //設(shè)置斷點
//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、啟動服務(wù)進行測試。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于MyBatis結(jié)果映射的實例總結(jié)
結(jié)果集映射主要是為了解決屬性名和類型名不一致的問題,下面這篇文章主要給大家介紹了關(guān)于MyBatis結(jié)果映射的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-05-05
Spring Cloud下實現(xiàn)用戶鑒權(quán)的方案
Java下常用的安全框架主要有Spring Security和shiro,都可提供非常強大的功能,但學(xué)習(xí)成本較高。但在微服務(wù)下鑒權(quán)又會對服務(wù)有一定的入侵性。 因此,本文將介紹Spring Cloud下實現(xiàn)用戶鑒權(quán)的方案,感興趣的同學(xué)可以關(guān)注一下2021-11-11
聊聊Spring循環(huán)依賴三級緩存是否可以減少為二級緩存的情況
這篇文章主要介紹了聊聊Spring循環(huán)依賴三級緩存是否可以減少為二級緩存的情況,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02

