java new collection_使用Java 8新增的Predicate操作Collection集合

Java 8 起為 Collection 集合新增了一個 removeIf(Predicate filter) 方法,該方法將會批量刪除符合 filter 條件的所有元素。該方法需要一個 Predicate 對象作為參數,Predicate 也是函數式接口,因此可使用 Lambda 表達式作為參數。

如下程序示范了使用 Predicate 來過濾集合。

public class ForeachTest {

public static void main(String[] args) {

// 創建一個集合

Collection objs = new HashSet();

objs.add(new String("C語言中文網Java教程"));

objs.add(new String("C語言中文網C++教程"));

objs.add(new String("C語言中文網C語言教程"));

objs.add(new String("C語言中文網Python教程"));

objs.add(new String("C語言中文網Go教程"));

// 使用Lambda表達式(目標類型是Predicate)過濾集合

objs.removeIf(ele -> ((String) ele).length() < 12);

System.out.println(objs);

}

}

上面程序中第 11 行代碼調用了 Collection 集合的 removeIf() 方法批量刪除集合中符合條件的元素,程序傳入一個 Lambda 表達式作為過濾條件。所有長度小于 12 的字符串元素都會被刪除。編譯、運行這段代碼,可以看到如下輸出:

[C語言中文網Java教程, C語言中文網Python教程]

使用 Predicate 可以充分簡化集合的運算,假設依然有上面程序所示的 objs 集合,如果程序有如下三個統計需求:

統計集合中出現“C語言中文網”字符串的數量。

統計集合中出現“Java”字符串的數量。

統計集合中出現字符串長度大于 12 的數量。

此處只是一個假設,實際上還可能有更多的統計需求。如果采用傳統的編程方式來完成這些需求,則需要執行三次循環,但采用 Predicate 只需要一個方法即可。下面代碼示范了這種用法。

public class ForeachTest2 {

public static void main(String[] args) {

// 創建一個集合

Collection objs = new HashSet();

objs.add(new String("C語言中文網Java教程"));

objs.add(new String("C語言中文網C++教程"));

objs.add(new String("C語言中文網C語言教程"));

objs.add(new String("C語言中文網Python教程"));

objs.add(new String("C語言中文網Go教程"));

// 統計集合中出現“C語言中文網”字符串的數量

System.out.println(calAll(objs, ele -> ((String) ele).contains("C語言中文網")));

// 統計集合中出現“Java”字符串的數量

System.out.println(calAll(objs, ele -> ((String) ele).contains("Java")));

// 統計集合中出現字符串長度大于 12 的數量

System.out.println(calAll(objs, ele -> ((String) ele).length() > 12));

}

public static int calAll(Collection books, Predicate p) {

int total = 0;

for (Object obj : books) {

// 使用Predicate的test()方法判斷該對象是否滿足Predicate指定的條件

if (p.test(obj)) {

total++;

}

}

return total;

}

}

輸出結果為:

5 1 1

上面程序先定義了一個 calAll() 方法,它使用 Predicate 判斷每個集合元素是否符合特定條件,條件將通過 Predicate 參數動態傳入。從上面程序中第 11、13、15 行代碼可以看到,程序傳入了 3 個 Lambda 表達式,其目標類型都是 Predicate,這樣 calAll() 方法就只會統計滿足 Predicate 條件的圖書。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/259654.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259654.shtml
英文地址,請注明出處:http://en.pswp.cn/news/259654.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

codevs1219 騎士遍歷(棋盤DP)

題目描述 Description設有一個n*m的棋盤&#xff08;2≤n≤50&#xff0c;2≤m≤50&#xff09;&#xff0c;如下圖&#xff0c;在棋盤上有一個中國象棋馬。 規定&#xff1a; 1)馬只能走日字 2)馬只能向右跳 問給定起點x1,y1和終點x2,y2&#xff0c;求出馬從x1,y1出發到x2,y2的…

php顯示錯誤

error_reporting(E_ALL);ini_set(display_errors, 1);//將出錯信息輸出到一個文本文件ini_set(error_log, dirname(__FILE__) . /error_log.txt);

java ssh免密登錄_SSH公鑰、私鑰配置(SSH免密碼登錄方式)

1.首先使用想要發起ssh免密訪問的用戶A登錄Linux(簡稱客戶端Linux)2.進入該用戶的家目錄(cd ~)&#xff0c;看是否有.ssh文件夾(linux中以.開頭文件夾是隱藏的&#xff0c;使用ll -a進行查看)&#xff0c;如果沒有則創建(mkdir ~/.ssh)&#xff0c;并修改訪問權限(chmod 700 ~…

最近學到的一點東西

1 rpc 2 socket&#xff0c;工作很多年了&#xff0c;才明白這貨的重要性&#xff0c;不過什么樣的通信方式&#xff0c;最底層的連接得用它 3 sip協議 4調試&#xff0c;一定要確認異常出錯位置&#xff0c;不能亂猜 5 某些詭異的問題&#xff0c;可以依靠在加一層解決&#x…

win8, VS2013 .NET 4.5在哪找svcutil.exe?

我這個糾結呀&#xff0c;公司用win8&#xff0c; .NET 4.5。想做一個很簡單的項目&#xff0c;就是wcf宿主iis&#xff0c;項目根目錄下有aspx文件和svc文件。于是參考了一個博客http://www.cnblogs.com/yjmyzz/archive/2008/08/19/1270961.html&#xff0c;[原創]WCF入門級使…

java tbase_使用Java從firebase獲取數據

我在下面的代碼中遇到了一個問題,該代碼幾乎逐字地從Firebase SDK Java文檔中復制到了工作中.我是一個真正的語言的新手,比如來自PHP和JavaScript的webdev背景的Java.基本上,addListenerForSingleValueEvent沒有觸發以返回數據.我注意到了這一點,因為系統打印輸出沒有觸發,因此…

錯誤內存【讀書筆記】C程序中常見的內存操作有關的典型編程錯誤

題記&#xff1a;寫這篇博客要主是加深自己對錯誤內存的認識和總結實現算法時的一些驗經和訓教&#xff0c;如果有錯誤請指出&#xff0c;萬分感謝。 對C/C程序員來講&#xff0c;內存管理是個不小的挑戰&#xff0c;絕對值得慎之又慎&#xff0c;否則讓由上萬行代碼構成的模塊…

Spring_HelloWord

環境&#xff1a;IntelliJ 14 &#xff1b; jdk1.8 Spring操作步驟 1.新建項目---Spring Batch2.IntelliJ會自動加載jar包3.現在就可以在src目錄下寫Java類文件了4.將相應的類部署在XML配置文件spring-config.xml中 &#xff08;Eclipse需要手動創建&#xff0c;貌似名為bean.x…

java 按鈕組_java中創建一個按鈕組,有10個按鈕,分別寫著0,1,2,,3。。。。9

展開全部用Java創建按鈕組32313133353236313431303231363533e59b9ee7ad9431333332643966的程序如下:import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;public class…

Starling 2D框架簡介

本系列是對Introducing Starling pdf的翻譯&#xff0c;下文是對adobe開發人員中心的一片日志的轉載&#xff0c;地址為http://www.adobe.com/cn/devnet/flashplayer/articles/introducing_Starling.html Starling 是在 Stage3D APIs 基礎上開發的一種 ActionScript 3 2D 框架&…

基本數據結構——棧

棧的特征是后進先出&#xff08;last-in, first-out, LIFO&#xff09;。棧上的插入操作稱為壓入&#xff08;PUSH&#xff09;&#xff0c;刪除操作稱為彈出&#xff08;POP&#xff09;。 下面使用一個數組S[n]來實現一個最多容納n個元素的棧。定義一個屬性指向最新插入的元素…

Android AutoCompleteTextView控件實現類似百度搜索提示,限制輸入數字長度

Android AutoCompleteTextView 控件實現類似被搜索提示&#xff0c;效果如下 1.首先貼出布局代碼 activity_main.xml&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res…

Centos/RHEL上查看主板型號

老是搞忘記&#xff0c;專門做個記錄&#xff1a; [rootmedia ~]# dmidecode | grep "Product Name" Product Name: To be filled by O.E.M.Product Name: B75M-D3V 修改默認語言&#xff1a;[chenshouyongmedia ~]$ cat /etc/sysconfig/i18n LANG"en_US.UTF-8…

java即時聊天系統畢業_(完整版)基于Java即時聊天系統的設計與實現畢業論文設計...

目錄1 前言...................................................................................................................................1.1 課題選題背景...................................................................................................…

杭電 1284 錢幣兌換問題【完全背包求方案總數】

解題思路&#xff1a;因為對于完全背包的狀態轉移方程f[v]max(f[v],f[v-c[i]]w[i])已經記錄了所有背包組成的方案&#xff0c;只不過通常問的是求最大值&#xff0c;現在要求方案總數 即為 f[v]sum(f[v],f[v-c[i]w[i]]), Problem Description在一個國家僅有1分&#xff0c;2分&…

java與算法_Java與算法之(1) - 冒泡排序

冒泡排序法的原理是&#xff0c;每次比較相鄰的兩個元素&#xff0c;如果它們的順序錯誤就把它們交換過來。例如對4 3 6 2 7 1 5這7個數字進行從小到大的排序&#xff0c;從最左側開始&#xff0c;首先比較4和3因為是從小到大排序&#xff0c;4和3的順序顯然是錯誤的&#xff0…

Js+XML 操作

我的xml文件Login.xml如下. <?xml version"1.0" encoding"utf-8" ?><Login><Character><C Text"熱血"Value"0"></C><C Text"弱氣"Value"1"></C><C Text"激情…

Java(Android)線程池

1、new Thread的弊端執行一個異步任務你還只是如下new Thread嗎&#xff1f; [java] view plaincopy new Thread(new Runnable() { Override public void run() { // TODO Auto-generated method stub } }).start(); 那你就out太多了&#xff0c;n…

JQuery鏈式操作簡單的菜單列表

看到這個簡單的菜單demo&#xff0c;也是為了再看看JQuery對DOM的操作&#xff0c;一直都記不牢&#xff0c;特別是siblings&#xff08;&#xff09;這個總是想不起來。 這次再過一遍JQuery&#xff0c;不管簡單的還是復雜的demo 還是堅持練習一遍吧&#xff01;只為記錄&…

java 網絡編程實驗_Java網絡編程入門實驗一涉及點

1.http://www.cr173.com/html/20128_all.html 【wireshark怎么抓包、wireshark抓包詳細圖文教程】2.http://blog.csdn.net/huangjin0507/article/details/51678858 【HTTP協議1&#xff1a;工作原理】3.https://www.cnblogs.com/1666818961-lxj/p/7210021.html 【網絡常用端口號…