Guava

GUAVA常用方法总结整理(list map string concurrent file)

无人久伴 提交于 2020-03-19 14:59:33
3 月,跳不动了?>>> 1.对字符串的操作: package com.wenniuwuren.guava; import java.io.UnsupportedEncodingException; import java.util.Date; import java.util.HashMap; import com.google.common.base.CharMatcher; import com.google.common.base.Charsets; import com.google.common.base.Objects; import com.google.common.base.Strings; import com.google.common.collect.ComparisonChain; import sun.org.mozilla.javascript.internal.ast.TryStatement; /** * * @ClassName: WorkingWithStrings * @Description: 对字符串的操作 * @author wenniuwuren * @date 2015-5-20 上午11:33:59 * */ public class WorkingWithStrings { public static void main

Guava一些高效类的使用实践

流过昼夜 提交于 2020-03-19 14:51:39
3 月,跳不动了?>>> guava是google的一个强大的工具包,目前已经更新到版本22 https://github.com/google/guava ,一直有断断续续的用过一些方法,但是没有系统的撸一遍所有功能 今天参考并发编程网记录一些高效的工具方法 http://ifeve.com/google-guava/ 1 Optional表示可能为null的引用,用存在或者缺失来表示null或者非null,get(),or(),orNull()是三种不同处理null的返回方法 2 Preconditions可以用来做一些前置检查,非常时候参数非空校验 3 Object的toStringHelper 在重定义tostring的时候非常有效 4 使用Ordering来快速排序,可以构建一个ordering对象并调用max()或者min() 5 使用不可变集合ImmutableXXX,创建的方法 有of(),copyOf()或者builder() 6 Guava的新集合有Multiset,Multimap,BiMap,Table,ClassToInstanceMap,RangeSet,RangeMap ,每一个都是神器啊 7 Guava提供了集合类的加强类,比如Collections2,XXs等 8 LoadingCache可以用来做缓存,使用CacheBuilder来构造 9

GUAVA常用方法总结整理(list map string concurrent file)

纵饮孤独 提交于 2020-03-19 14:30:17
3 月,跳不动了?>>> 1.对字符串的操作: package com.wenniuwuren.guava; import java.io.UnsupportedEncodingException; import java.util.Date; import java.util.HashMap; import com.google.common.base.CharMatcher; import com.google.common.base.Charsets; import com.google.common.base.Objects; import com.google.common.base.Strings; import com.google.common.collect.ComparisonChain; import sun.org.mozilla.javascript.internal.ast.TryStatement; /** * * @ClassName: WorkingWithStrings * @Description: 对字符串的操作 * @author wenniuwuren * @date 2015-5-20 上午11:33:59 * */ public class WorkingWithStrings { public static void main

0318 guava并发工具

安稳与你 提交于 2020-03-19 13:57:20
3 月,跳不动了?>>> <br /> <br />并发是一个难题,但是可以通过使用强力简单的抽象来显著的简化,为了简化问题,guava扩展了Future接口,即 ListenableFuture (可以监听的Future)。<br />我强烈建议你在你的所有代码里使用ListenableFuture去替代Future,原因如下: 很多的Futures 类的方法需要它。(Futures工具类使用) 它比后来改造为ListenableFutrue更简单。(早点使用比重构更简单) 工具方法的提供者不需要提供Future和ListenableFuture方法的变体。(不需要兼容两套) <br /> 接口 一个传统的Futrue代表一个异步计算的结果:一个可能完成也可能没有完成输出结果的计算。<br />一个Future可以用在进度计算,或者说是 一个提供给我们结果的服务的承诺。<br /> <br />一个ListenableFuture允许注册当你在计算完成的时候的回调,或者计算已经完成了。<br />这个简单的增强让高效支持多种操作成为可能。而Future接口并不能支持。<br /> <br />ListenbleFuture中添加的基本操作是<br />addListener(Runnable , Executor ),<br />它指出了当未来计算完成时

服务限流算法的几种实现

孤街浪徒 提交于 2020-03-15 22:01:57
一、场景描述 由于业务应用系统的负载能力有限,为了防止非预期的请求对系统压力过大而拖垮业务应用系统。 面对大流量时,如何进行流量控制? 服务接口的流量控制策略:分流、降级、限流等。 本文讨论限流策略,虽然降低了服务接口的访问频率和并发量,却换取服务接口和业务应用系统的高可用。 实际场景中常用的限流策略: Nginx前端限流 按照一定的规则如帐号、IP、系统调用逻辑等在Nginx层面做限流 业务应用系统限流 1、客户端限流 2、服务端限流 数据库限流 红线区,力保数据库 按照服务的调用方,可以分为以下几种类型服务 1、与用户打交道的服务 比如web服务、对外API,这种类型的服务有以下几种可能导致机器被拖垮: 用户增长过快 因为某个热点事件(微博热搜) 竞争对象爬虫 恶意的刷单 这些情况都是无法预知的,不知道什么时候会有10倍甚至20倍的流量打进来,如果真碰上这种情况,扩容是根本来不及的 2、对内的RPC服务 一个服务A的接口可能被B C D E多个服务进行调用,在B服务发生突发流量时,直接把A服务给调用挂了,导致A服务对C D E 也无法提供服务。 这种情况时有发生,解决方案有两种: 1、每个调用方采用线程池进行资源隔离 2、使用限流手段对每个调用方进行限流 二、常用的限流算法 常见的限流算法有:计数器、令牌桶、漏桶。 1、计数器算法 采用计数器实现限流有点简单粗暴

还在使用集合类完成这些功能?不妨来看看 Guava 集合类!!!

假装没事ソ 提交于 2020-03-13 07:56:36
日常开发中,小黑哥经常需要用到 Java 提供集合类完成各种需求。Java 集合类虽然非常强大实用,但是提供功能还是有点薄弱。 举个例子,小黑哥最近接到一个需求,从输入一个文档中,统计一个关键词出现的次数。代码如下: 虽然这个需求使用 Map 可以轻松搞定,但是小黑哥还是觉得这种写法有点笨拙,如果没有判空,将会导致 NPE 异常。 如果很多地方需要功能,我们就可以抽象出来,将其封装成工具类。 不过上面的功能大家就不需要自己封装,一款来自 Google 开源工具类- Guava ,可以轻松的解决上面的统计问题。 Guava 介绍 Guava 是一款 Google 开源工具类,包含许多 Google 内部 Java 项目依赖的核心类。Guava 扩展 Java 基础类工程,比如集合,并发等,也增加一些其他强大功能,比如缓存,限流等功能。 另外 Guava 推出一些类,如 Optional ,甚至被 Java 开发者学习,后续增加到 JDK 中。 目前 Guava Github 仓库 已有 36k star ,可以见到 Guava 受欢迎程度。 Guava 核心功能包括多个模块,今天小黑哥主要带大家玩转 Guava 集合类。 扩展集合类 Guava 创造很多 JDK 没有,但是我们日常却明显有用的新集合类型。这些新类型使用 JDK 集合接口规范,所以使用方法与 JDK 集合框架差不多

【Java必修课】判断String是否包含子串的四种方法及性能对比

落花浮王杯 提交于 2020-03-10 23:45:56
1 简介 判断一个字符串是否包含某个特定子串是常见的场景,比如判断一篇文章是否包含敏感词汇、判断日志是否有 ERROR 信息等。本文将介绍四种方法并进行性能测试。 2 四种方法 2.1 JDK原生方法String.indexOf 在 String 的函数中,提供了 indexOf(subStr) 方法,返回子串 subStr 第一次出现的位置,如果不存在则返回-1。例子如下: //包含Java assertEquals(7, "Pkslow Java".indexOf("Java")); //如果包含多个,返回第一次出现位置 assertEquals(0, "Java Java".indexOf("Java")); //大小写敏感 assertEquals(-1, "Google Guava".indexOf("guava")); 2.2 JDK原生方法String.contains 最直观判断的方法是 contains(subStr) ,返回类型为 boolean ,如果包含返回 true ,不包含则返回 false 。例子如下: //包含Java assertTrue("code in Java".contains("Java")); //大小写敏感,不包含GO assertFalse("Let's go".contains("GO")); //转为大写后包含

Exception in thread “main” java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkState(ZLjava/lang/String;Ljava/lang/Object;)

给你一囗甜甜゛ 提交于 2020-03-05 06:45:45
问题 I develop the selenium code that: import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.edge.EdgeDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.support.ui.Select; import java.util.List; public class TestDemoQA { public static void main(String[] args) throws InterruptedException{ System.setProperty("webdriver.edge.driver", "C:\

用Java增加Map值的最有效方法

与世无争的帅哥 提交于 2020-03-03 12:17:05
我希望这个问题对于本论坛来说不是太基本了,但是我们会看到的。 我想知道如何重构一些代码以获得更好的性能,而这些性能已经运行了很多次。 假设我正在使用地图(可能是HashMap)创建一个单词频率列表,其中每个键是一个带有要计算单词的String,并且值是一个Integer,每次找到该单词的标记时都会增加。 在Perl中,增加这样的值非常容易: $map{$word}++; 但是在Java中,它要复杂得多。 这是我目前的操作方式: int count = map.containsKey(word) ? map.get(word) : 0; map.put(word, count + 1); 当然,哪个依赖于较新的Java版本中的自动装箱功能。 我想知道您是否可以建议一种更有效的递增此值的方法。 避开Collections框架并改用其他东西,甚至有良好的性能原因吗? 更新:我已经测试了几个答案。 见下文。 #1楼 一些测试结果 对于这个问题,我已经得到了很多很好的答案-谢谢大家-因此,我决定进行一些测试,找出哪种方法实际上最快。 我测试的五种方法是: 我在 问题中 介绍的“ ContainsKey”方法 Aleksandar Dimitrov建议的“ TestForNull”方法 Hank Gay建议的“ AtomicLong”方法 jrudolph建议的“激励”方法 phax

Guava学习笔记 第2个记录(Preconditions优雅的检验参数)

℡╲_俬逩灬. 提交于 2020-02-28 13:56:37
在日常开发中,我们经常会对方法的输入参数做一些数据格式上的验证,以便保证方法能够按照正常流程执行下去。对于可预知的一些数据上的错误,我们一定要做事前检测和判断,来避免程序流程出错,而不是完全通过错误处理来保证流程正确执行,毕竟错误处理是比较消耗资源的方式。在平常情况下我们对参数的判断都需要自己来逐个写方法判断,代码量不少并且复用性不高,如下所示: import org.junit.Test; public class PreconditionsTest { @Test public void Preconditions() throws Exception { getPerson(8,"peida"); getPerson(-9,"peida"); getPerson(8,""); getPerson(8,null); } public static void getPerson(int age,String neme)throws Exception{ if(age>0&&neme!=null&&neme.isEmpty()!=true){ System.out.println("a person age:"+age+",neme:"+neme); }else{ System.out.println("参数输入有误!"); } } } 说明:参数验证