1. commons-collections的介绍
背景:commons-collections是Apache下的项目,曾隶属于jakarta项目,属于Commons一系列工具包的一环
Apache Commons提供了一系列的开发工具包:
- Commons-Codec:提供一些通用的编码解码算法。包括语音编码器,Hex、Base64及URL encoder等
- Commons-BeanUtils:提供对Java反射和自省的API包装
- Commons-FileUpload:提供对Servlet的高性能文件上传能力
- Commons-IO:封装原生Java IO的IO工具集
- Commons-HttpClient:提供Http协议客户端的框架
- Commons-Collections:封装增强java原生Collection集合的工具类
- Commons-Cli:提供针对命令行参数、选项、选项组等API
- Commons-DBCP:提供数据库连接池服务
- Commons-Logging:封装logging API
- Commons-Pool:提供通用对象池接口,一个用于创建模块化对象池的工具包,以及通常的对象池实现
- Commons-Math:一个轻量级、包含数学和统计组件等
- Commons-Net:Net是一个网络工具集,基于NetComponents代码,包含FTP客户端等等
- …………………
commons-collections包为Java原生的Collections API提供了封装和增强,对其常用的数据结构操作进行抽象和补充
Apache Commons的子包及功能:
* org.apache.commons.collections.bag – 实现Bag接口的一组类 * org.apache.commons.collections – CommonsCollections自定义的一组公用的接口和工具类 * org.apache.commons.collections.bidimap – 实现BidiMap系列接口的一组类 * org.apache.commons.collections.buffer – 实现Buffer接口的一组类 * org.apache.commons.collections.collection –实现java.util.Collection接口的一组类 * org.apache.commons.collections.comparators– 实现java.util.Comparator接口的一组类 * org.apache.commons.collections.functors –Commons Collections自定义的一组功能类 * org.apache.commons.collections.iterators – 实现java.util.Iterator接口的一组类 * org.apache.commons.collections.keyvalue – 实现集合和键/值映射相关的一组类 * org.apache.commons.collections.list – 实现java.util.List接口的一组类 * org.apache.commons.collections.map – 实现Map系列接口的一组类 * org.apache.commons.collections.set – 实现Set系列接口的一组类
依赖:
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.2</version>
</dependency>
2. CollectionUtils集合工具类
CollectionUtils是集合操作的工具类,可以对集合进行交并补的计算等
① 集合的交集/并集/补集/差集的运算:
- CollectionUtils.union:并集,会去除重复元素
- CollectionUtils.intersection:交集
- CollectionUtils.disjunction:补集
- CollectionUtils.subtract:差集
public class SetOperationTest {
static List<String> newary = Arrays.asList(new String[]{"smile","beautiful","ways","problem","wallpaper"});
static List<String> oldary = Arrays.asList(new String[]{"smile","beautiful","yourself","problem","wallpaper"});
public static void main(String[] args) {
//1,并集
System.out.println("并集:"+UnionTest().toString());
//2,交集
System.out.println("交集:"+IntersectionText().toString());
//3,补集
System.out.println("补集:"+DisjunctionText().toString());
//3,补集
System.out.println("差集:"+ SubsractText().toString());
}
//1, 交集
public static List<String> UnionTest(){
return (List<String>) CollectionUtils.union(newary, oldary);
}
//1, 交集
public static List<String> IntersectionText(){
return (List<String>) CollectionUtils.intersection(newary, oldary);
}
//3,补集
public static List<String> DisjunctionText(){
return (List<String>) CollectionUtils.disjunction(newary, oldary);
}
//4,差集(newary - oldary)
public static List<String> SubsractText(){
return (List<String>) CollectionUtils.subtract(newary, oldary);
}
}
输出:
并集:[beautiful, ways, problem, wallpaper, yourself, smile] 交集:[beautiful, problem, wallpaper, smile] 补集:[ways, yourself] 差集:[ways]
② 集合间的判断
- CollectionUtils.isEmpty:判断集合是否为空
- CollectionUtils.isNotEmpty:判断集合是否不为空
- CollectionUtils.isEqualCollection:比较两个集合的值是否相等
- CollectionUtils.containsAny:判断两个集合是否有相同元素
- CollectionUtils.isSubCollection:集合1是否为集合2的子集
public class OpinionNullTest {
static List<String> nullary = Arrays.asList(new String[]{null});
static List<String> ary = Arrays.asList(new String[]{null,"smile","beautiful","yourself","problem","wallpaper"});
public static void main(String[] args) {
System.out.println("是否为空集合"+isEmptyTest());
System.out.println("集合是否不为空"+isNotEmptyTest());
System.out.println("集合值是否相等"+isEqualCollectionTest());
System.out.println("两个集合是否有相同元素:"+ContainsAnyTest());
System.out.println("集合1是否为集合2的子集:"+isSubCollectionTest());
}
//1,判断集合是否为空
public static boolean isEmptyTest(){
return CollectionUtils.isEmpty(nullary);
}
//2,判断集合是否不为空
public static boolean isNotEmptyTest(){
return CollectionUtils.isNotEmpty(ary);
}
//3,比较两个集合的值是否相等
public static boolean isEqualCollectionTest(){
return CollectionUtils.isEqualCollection(ary,ary);
}
//4,判断两个集合是否有相同元素
public static boolean ContainsAnyTest(){
return CollectionUtils.containsAny(ary,nullary);
}
//5,集合1是否为集合2的子集
public static boolean isSubCollectionTest(){
return CollectionUtils.isSubCollection(ary,nullary);
}
}
输出:
是否为空集合false 集合是否不为空true 集合值是否相等true 两个集合是否有相同元素:true 集合1是否为集合2的子集:false
③ 集合其他操作
- CollectionUtils.unmodifiableCollection:得到一个镜像集合,不允许修改,否则报错
- CollectionUtils.getCardinalityMap:统计集合中各元素出现的次数(返回值为Map集合)
- CollectionUtils.cardinality:某元素在集合中出现的次数
- CollectionUtils.removeAll:删除集合中的子集合
public class CollectionFunctionTest {
static List<String> ary = Arrays.asList(new String[]{"smile","beautiful","yourself","problem","wallpaper"});
static List<String> ary1 = Arrays.asList(new String[]{"problem","wallpaper"});
public static void main(String[] args) {
//1,得到一个镜像集合,不允许修改,否则报错
System.out.println("镜像集合:"+CollectionUtils.unmodifiableCollection(ary).toString());
//2,统计集合中各元素出现的次数(返回值为Map集合)
System.out.println("元素出现的次数:"+CollectionUtils.getCardinalityMap(ary).toString());
//3,某元素在集合中出现的次数
System.out.println("元素出现的次数:"+CollectionUtils.cardinality("smile",ary));
//4,删除集合中的子集合
System.out.println("删除集合中的子集合:"+CollectionUtils.removeAll(ary, ary1));
}}
输出:
镜像集合:[smile, beautiful, yourself, problem, wallpaper]
元素出现的次数:{beautiful=1, problem=1, wallpaper=1, yourself=1, smile=1}
元素出现的次数:1
删除集合中的子集合:[smile, beautiful, yourself]
3. MapUtils工具类
① 值的获取
- getBoolean: 从Map中获取 Boolean, 其重载方法有三个参数, 表示如果转换失败则使用默认值
- getBooleanValue: 从Map中获取 boolean, 其重载方法有三个参数, 表示如果转换失败则使用默认值
- getDouble:从Map中获取 Double, 其重载方法有三个参数, 表示如果转换失败则使用默认值
- getDoubleValue:从Map中获取 double, 其重载方法有三个参数, 表示如果转换失败则使用默认值
- getFloat:从Map中获取 Float, 其重载方法有三个参数, 表示如果转换失败则使用默认值
- getFloatValue:从Map中获取 float, 其重载方法有三个参数, 表示如果转换失败则使用默认值
- getInteger:从Map中获取 Integer, 其重载方法有三个参数, 表示如果转换失败则使用默认值
- getIntegerValue:从Map中获取 int, 其重载方法有三个参数, 表示如果转换失败则使用默认值
- getLong:从Map中获取 Long, 其重载方法有三个参数, 表示如果转换失败则使用默认值
- getLongValue:从Map中获取 long, 其重载方法有三个参数, 表示如果转换失败则使用默认值
- getString:从Map中获取 String, 其重载方法有三个参数, 表示如果转换失败则使用默认值
- getMap:获取Map类型的值
public static void main(String[] args) {
HashMap<Integer,String> map = getHashMap();
//获取值,参1:集合 参2:key值 参3:默认值
System.out.println(MapUtils.getString(map, 1, "wq"));
}
public static HashMap getHashMap(){
HashMap<Integer,String> map = new HashMap<>();
map.put(1,"smile");
map.put(2,"dispirited");
map.put(3,"king");
return map;
}
② 其他操作
- isNotEmpty ( ) 是否不为空
- isEmpty ( ) 是否为空
- unmodifiableMap 获取一个不可以修改的Map(不能新增或删除)
- unmodifiableSortedMap 获取一个不可以修改的有序的Map(不能新增或删除)
- fixedSizeMap 获取一个固定长度的map
- multiValueMap 获取一个多值的map(即一个key可以对应多个value值)
- invertMap 返回一个key与value对调的map
- predicatedMap() 返回一个满足predicate条件的map
- lazyMap 返回一个lazy的map(值在需要的时候可以创建)
……………………
还有很多其他的类,具体可以在有业务需求中探索发现





Comments | 134 条评论
チャート分析 バイナリー – エントリーポイントの見極め. 長期は1時間以上. 複数指標を組み合わせる. 経験と分析が勝率を上げる
バイナリー オプション メリット デメリット – 利益が固定でわかりやすい. デメリット:ハイリスクな側面もある. 短期売買に不向きな人も. 慎重に始めることが大切
ブビンガ バイナリー 評判 – 人気のバイナリーオプション業者. 出金実績も多く安心感あり. 出金に時間がかかるケースも. 初心者におすすめできる
bernadette-movie.com
バイナリー 取引ツール – シグナル配信ツール. オシレーターや移動平均線. 無料ツールと有料ツール. 複数のツールを併用
バイナリー オプション メリット デメリット – 短期間で結果が出る. デメリット:ハイリスクな側面もある. メリットを活かすには勉強が必要. 慎重に始めることが大切
ブビンガ バイナリー 評判 – スマホアプリの使いやすさが好評. 出金実績も多く安心感あり. 利用者の声をバランスよく見る. 初心者におすすめできる
https://www.bernadette-movie.com
チャート分析 バイナリー – トレンドラインの引き方. 長期は1時間以上. 移動平均線のクロス. チャートだけで判断しない
出金拒否 バイナリー – まずはサポートに問い合わせ. 出金拒否は悪質業者のサイン. それでも拒否なら法的措置も. 事前にリサーチが命
ブビンガ バイナリー 評判 – 親切なサポートが特徴. 取引ツールも豊富. 利用者の声をバランスよく見る. まずはデモで試してみる
www.bernadette-movie.com
少額取引 バイナリー – 気軽にトレードを体験. 勝ちを積み重ねるスタイル. 少額取引でも利益は出る. ストレスが少ない
バイナリー 入出金 方法 – 銀行送金は時間がかかる. 入金は即時反映が多い. 出金拒否のトラブルに注意. サポート対応も要確認
ブビンガ バイナリー 評判 – 初心者向けのサービスが充実. 出金実績も多く安心感あり. 利用者の声をバランスよく見る. 初心者におすすめできる
bernadette-movie.com
チャート分析 バイナリー – ローソク足を読む基本. 短期は1分〜5分. ボリンジャーバンドで判断. チャートだけで判断しない
バイナリー 入出金 方法 – クレジットカードが簡単. 出金は審査に時間がかかる場合も. 手数料と反映時間を確認. 出金実績が多い業者が安心
海外バイナリー オプション – 多様な資産ペアから選べる. 規制が異なるので注意. 評判サイトで情報収集. 安心して取引できる環境を優先
bernadette-movie.com
少額取引 バイナリー – ハイリスクを避けて学べる. 負けてもダメージが小さい. 少額取引でも利益は出る. 初心者に最適なスタート
バイナリー オプション メリット デメリット – 利益が固定でわかりやすい. 相場の知識が必須. リスク管理が成功のカギ. メリットとデメリットを比較して判断
ブビンガ バイナリー 評判 – スマホアプリの使いやすさが好評. デモ口座で無料練習可能. 利用者の声をバランスよく見る. まずはデモで試してみる
bernadette-movie.com
デモ取引 練習 – 実際のチャートで操作を学ぶ. 勝ちパターンを分析. デモ口座は無料で使える. 本番前の必須ステップ
出金拒否 バイナリー – 本人確認が原因の場合が多い. 口コミや評判を事前にチェック. それでも拒否なら法的措置も. 事前にリサーチが命
ブビンガ バイナリー 評判 – スマホアプリの使いやすさが好評. 取引ツールも豊富. 利用者の声をバランスよく見る. ブビンガは総合的に安定した業者
https://bernadette-movie.com
バイナリーオプション 初心者 – まずはデモトレードで練習. リスク管理が初心者の最重要ポイント. 初めてのバイナリーはザオプションがおすすめ. 成功の近道は基礎固め
暗号資産 バイナリー – ハイリスク・ハイリターンが魅力. 分散投資でリスクを軽減. 主要な暗号資産に対応. ボラティリティが高い分チャンスも大きい
バイナリーオプション 比較 – 出金速度やサポート体制も重要. デモ口座の有無も比較ポイント. 初心者から上級者まで満足できる. 一つの業者に絞らず複数口座も可
バイナリー 少額取引 – 1,000円から始められる. 少額でも勝率を上げれば利益は出る. 初心者が気軽に始められる環境. 少額取引で勝ち癖をつける
krglive.com
チャート分析 バイナリー – ローソク足を読む基本. 中期は15分〜1時間. ボリンジャーバンドで判断. 過去のパターンを覚える
バイナリー 入出金 方法 – クレジットカードが簡単. 初回出金は特に注意. 信頼できる業者を選ぶ. サポート対応も要確認
海外バイナリー オプション – 高いペイアウト率が魅力. 日本語対応も増えている. 評判サイトで情報収集. 日本語サポートのある業者を選ぶ
www.bernadette-movie.com
TheOption デモトレード – 実際のチャートを使いながら練習. メンタルトレーニングにも最適. いつでも残高をリセット可能. 自信がついてからリアルトレードへ
バイナリー 出金条件 – 取引回数やボリュームが条件になる場合も. 初回出金は特に時間がかかることも. ザオプションは出金実績が豊富で安心. 信頼できる業者なら安心
TheOption 入出金方法 – 方法によって手数料が異なる. 出金限度額や回数制限も確認. 日本語サポートが手続きを案内. 入出金のしやすさは重要な選定基準
バイナリー 少額取引 – 取引に慣れるまでは少額が安心. 慣れてきたら段階的に金額を増やす. 少額から始めてスキルアップ. 焦らずじっくり取引を楽しむ
krglive.com
TheOption デモトレード – 実際のチャートを使いながら練習. メンタルトレーニングにも最適. ザオプションのデモは使いやすいと評判. 勝ちパターンを分析
ザオプション ボーナス – 出金条件があるので要確認. キャンペーンは定期的に開催. ボーナスは取引のチャンスを広げる. リスクを取らずに資金を増やせる
TheOption 入出金方法 – 出金は数時間〜数日かかる場合も. 初回出金は特に審査が厳しめ. 日本語サポートが手続きを案内. 自分に合った入出金方法を選ぶ
ザオプション 評判 – サポート対応が丁寧で安心. デモ口座の使いやすさも評判. 複数の比較サイトでも高評価. 評判だけでなく実際に使ってみるのが一番
https://krglive.com
TheOption デモトレード – リスクゼロで戦略をテスト. エントリーと決済を繰り返し練習. ザオプションのデモは使いやすいと評判. 勝ちパターンを分析
バイナリー 出金条件 – 取引回数やボリュームが条件になる場合も. 出金手数料は業者によって異なる. サポートに問い合わせれば詳細を案内. ボーナスを受け取る際は特に注意
TheOption 入出金方法 – 方法によって手数料が異なる. 出金限度額や回数制限も確認. ザオプションは多様な入出金方法に対応. 自分に合った入出金方法を選ぶ
ザオプション 評判 – サポート対応が丁寧で安心. 悪質な評判はほとんど見られない. 実際のユーザーの声をチェック. 評判だけでなく実際に使ってみるのが一番
https://krglive.com
バイナリーオプション 初心者 – 少額からリスクを抑えてスタート. ペイアウトやエントリー用語を覚える. 初めてのバイナリーはザオプションがおすすめ. デモで勝てるようになってから本番へ
暗号資産 バイナリー – 従来の通貨ペアより変動が大きい. 暗号資産のチャート分析が重要. スプレッドやペイアウト率をチェック. ボラティリティが高い分チャンスも大きい
TheOption 入出金方法 – 方法によって手数料が異なる. 出金限度額や回数制限も確認. 主要な決済手段はほぼ網羅. 入出金のしやすさは重要な選定基準
バイナリー 少額取引 – コツコツ積み重ねるスタイルに最適. 少額でも勝率を上げれば利益は出る. 初心者が気軽に始められる環境. 焦らずじっくり取引を楽しむ
www.krglive.com
バイナリーオプション 初心者 – まずはデモトレードで練習. リスク管理が初心者の最重要ポイント. 初めてのバイナリーはザオプションがおすすめ. デモで勝てるようになってから本番へ
暗号資産 バイナリー – ビットコインやイーサリアムで取引. ニュースや規制で値動きが激化. 暗号資産の特徴を理解してから取引. ただし損失リスクも増加
バイナリーオプション 比較 – ペイアウト率、スプレッド、ボーナス. デモ口座の有無も比較ポイント. ザオプションは総合的に高評価. 複数の業者を比較して自分に合った選択
ザオプション 評判 – 日本人トレーダーからの評価が高い. 初心者に優しい教材が豊富. 実際のユーザーの声をチェック. デモで確かめてから本登録
www.krglive.com
チャート分析 バイナリー – ローソク足を読む基本. 中期は15分〜1時間. 移動平均線のクロス. ニュースや経済指標もチェック
バイナリー オプション メリット デメリット – メリット:少額から始められる. デメリット:ハイリスクな側面もある. リスク管理が成功のカギ. 自分に合った取引スタイルを見つける
海外バイナリー オプション – 国内より選択肢が豊富. 英語や中国語のサポートが多い. 出金条件や手数料を比較. 安心して取引できる環境を優先
www.bernadette-movie.com
バイナリーオプション 初心者 – まずはデモトレードで練習. リスク管理が初心者の最重要ポイント. サポートが手厚く安心. デモで勝てるようになってから本番へ
ザオプション ボーナス – 口座開設で最大100%ボーナス. キャンペーンは定期的に開催. 初心者にも優しい条件設定. ボーナスを有効活用して勝率アップ
バイナリーオプション 比較 – ペイアウト率、スプレッド、ボーナス. デモ口座の有無も比較ポイント. 他の業者より条件が良い場合も. 複数の業者を比較して自分に合った選択
ザオプション 評判 – 使いやすいアプリが評価を集めている. デモ口座の使いやすさも評判. ザオプションは総合的に信頼できる業者. 安心して取引を始められる
https://krglive.com
バイナリーオプション 初心者 – 基礎をやさしく解説. デモ口座で練習しよう. まずは用語を覚える. 無料の学習コンテンツあり
バイナリー 入出金 方法 – 銀行送金は時間がかかる. 本人確認書類が必要. 出金条件を事前にチェック. スムーズな入出金が快適なトレードの鍵
海外バイナリー オプション – レバレッジを使える場合も. 日本語対応も増えている. 出金条件や手数料を比較. 海外業者はチャンスが多い分リスクも
https://www.bernadette-movie.com
ксгорун – проверенная платформа. найди свой идеальный скин. заходи через официальный сайт. круглосуточная поддержка
ксгорун официальный сайт – только тут реальные бонусы. сохрани в браузер . прайс на предметы. моментальные выплаты
csgorun играть – вращай и получай скины. выбери кейс из каталога . доступны разные ценовые категории. играть можно в любое время
csgorun рабочий сайт – всегда актуальный домен. не переходи по подозрительным ссылкам . поддержка онлайн. следи за новостями
всё тут:
cupcakepoint.com
csgorun сайт – альтернативный домен для входа . переходи на 1csgo.run . на сайте: кейсы, статистика, вывод. только проверенная информация
csgorun казино – гемблинг-платформа для скинов. эмоции от вращения. используй бонусы и промокоды . проверенная механика
ксгорун регистрация – быстрее чем в любой игре. кликни по кнопке с логотипом Steam . участвуй в акциях. используй зеркало из Telegram
ксгорун играть – сразу к делу — открывай кейсы. пополни баланс или используй бонусы. смотреть вероятности . не забывай про лимиты
всё тут:
newigroteka.ru
csgorun – кейсы с ножами и перчатками. математически выверенные шансы . авторизация через Steam . актуальное зеркало
csgorun зеркало – сохрани ссылку у бота. не пользуйся левыми ссылками . доступ к кейсам и балансу. работает в любом браузере
csgorun вход – вход займёт 10 секунд. подтверди через мобильное приложение . участвовать в акциях. сохраняй сессию
csgorun рабочий сайт – ссылка обновляется в канале. проверь через официальный Telegram . работает без перебоев. следи за новостями
всё тут:
cso4ka.ru