字符串处理

Joiner是用来拼接转化集合到字符串的(其实很多动态语言基本上没有太区分字符串和普通集合,很多在集合上能用的方法在字符串上也能用,字符串本来就就是个字符数组)

Joiner.on("|").skipNulls().join(new Integer[]{1,2,3,4});
Joiner.on("|").useForNull("no value").join(stringList)//joiner类和java的pattern差不多,创建之后可以多次使用
Joiner stringJoiner = Joiner.on("|").skipNulls();
stringJoiner.join("foo","bar",null);//joiner还可以用来处理map
String expectedString = "Washington D.C=Redskins#New York
City=Giants#Philadelphia=Eagles#Dallas=Cowboys";
Map<String,String> testMap = Maps.newLinkedHashMap();
testMap.put("Washington D.C","Redskins");
testMap.put("New York City","Giants");
testMap.put("Philadelphia","Eagles");
testMap.put("Dallas","Cowboys");
String returnedString = Joiner.on("#").
withKeyValueSeparator("=").join(testMap);
assertThat(returnedString,is(expectedString));

spitter类是相反的转换,从字符串到集合

//转换
Splitter.on('|').split("foo|bar|baz");
//用正则来分割
Splitter splitter = Splitter.on("\\d+");
//删除多余的空格
Splitter splitter = Splitter.on('|').trimResults();
//字符串转换成map
String startString = "Washington D.C=Redskins#New York
City=Giants#Philadelphia=Eagles#Dallas=Cowboys";
Map<String,String> testMap = Maps.newLinkedHashMap();
testMap.put("Washington D.C","Redskins");
testMap.put("New York City","Giants");
testMap.put("Philadelphia","Eagles");
testMap.put("Dallas","Cowboys");
Splitter.MapSplitter mapSplitter =
Splitter.on("#").withKeyValueSeparator("=");
Map<String,String> splitMap =
mapSplitter.split(startSring);
assertThat(testMap,is(splitMap));

guava还有很多和字符串有关的功能,不过我觉得就这两个最有用,其他的一些对字符串本身的操作,例如替换,删除某些字符,还是直接用正则表达式来的更快,更清晰。

当然,java对正则表达式的处理稍显麻烦,所以这里还是要安利一发kotlin,使用正则表达式更加方便。

对象实用方法

guava还提供了很多实用的方法
toString

public String toString() {
return Objects.toStringHelper(this)
.omitNullValues()
.add("title", title)
.add("author", author)
.add("publisher", publisher)
.add("price",price)
.add("isbn", isbn).toString();
}

hashcode

public int hashCode() {
return Objects.hashCode(title, author, publisher, isbn);
}

compareTo

public int compareTo(Book o) {
return ComparisonChain.start()
.compare(this.title, o.getTitle())
.compare(this.author, o.getAuthor())
.compare(this.publisher, o.getPublisher())
.compare(this.isbn, o.getIsbn())
.compare(this.price, o.getPrice())
.result();
}

当然,时至今日,现在这些方法已经完全可以用ide来处理,使用guava反而有时更加麻烦。具体怎么选择还是看自己的喜好吧。

函数式编程支持

这个其实也没什么好讲的,就是加了几个接口,但是现在不仅java8已经自带了那些接口,还有强大的rxjava可以使用(强烈安利一发)。guava自己都把一些原来使用它自带的那些接口方法修饰成过时方法了,所以其实没什么好用的了。

如果要找函数式编程的框架,就用rxjava吧。


欢迎关注我的github
https://github.com/luckyCatMiao

guava深入理解(3)-字符串,实用方法,函数式编程相关推荐

  1. lua 字符串分割_Lua函数式编程(中)

    书接前文,我们继续慢慢的了解 所谓的函数式编程思想.考查下面的例子 判断给定的数是否是偶数 在Lua里面这似乎是个幼儿园问题 local isEven = function(v) return v % ...

  2. Kotlin 函数式编程(Kotlin Functional Programming)

    Kotlin 函数式编程 (Kotlin Functional Programming)     陈光剑 1. 函数式概述 6 1.1. 函数式简史 6 1.2. 函数式编程语言家族 7 1.2.1. ...

  3. 浅谈函数式编程与 Java Stream

    CSDN 社区的小伙伴们大家好啊,许久不见- 在这一篇文章中,我将介绍函数式编程的基本概念,如何使用函数式编程的思想编写代码以及 Java Stream 的基本使用方法. 本文不会涉及到任何晦涩难懂的 ...

  4. 翻译连载 | 第 10 章:异步的函数式(下)-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇...

    为什么80%的码农都做不了架构师?>>>    原文地址:Functional-Light-JS 原文作者:Kyle Simpson-<You-Dont-Know-JS> ...

  5. SegmentFault 技术周刊 Vol.16 - 浅入浅出 JavaScript 函数式编程

    函数式编程(Functional Programming),一看这个词,简直就是学院派的典范. 以至于从 Lisp 的创世,到 Scheme.Haskell.Clean.Erlang.Miranda. ...

  6. 【Java】基础36:函数式编程

    现在直播一直都很火,今天我们就用Java代码简单地模拟一个直播案例,以此来一步步说明什么叫函数式编程. 不要看这个名字好像挺难懂的样子,其实很简单,两分钟时间即可看完. 一.直播间案例 现在有一个直播 ...

  7. SegmentFault 技术周刊 Vol.16 - 浅入浅出 JavaScript 函数式编程 1

    函数式编程(Functional Programming),一看这个词,简直就是学院派的典范. 以至于从 Lisp 的创世,到 Scheme.Haskell.Clean.Erlang.Miranda. ...

  8. ASP.NET技巧:两个截取字符串的实用方法

    两个截取字符串的实用方法(超过一定长度自动换行) 1/** <summary> 2        /// 截取字符串,不限制字符串长度 3        /// </summary& ...

  9. 理解Java字符串常量池与intern()方法

    理解Java字符串常量池与intern()方法 阅读目录 Java内存区域 两种创建方式在内存中的区别 解释开头的例子 intern()方法 参考资料 String s1 = "Hello& ...

  10. JavaScript函数式编程之深入理解纯函数

    更多相关内容见博客 https://github.com/zhuanyongxigua/blog 纯函数是函数式编程的基础,需要重点理解. 纯函数的概念: 纯函数是这样一种函数,即相同的输入,永远会得 ...

最新文章

  1. vb.net 如何从文件中读取图像
  2. 【收藏】网络故障处理手册大全,看完再也不怕出问题了
  3. 在 .NET Core 中如何让 Entity Framework Core 在日志中记录由 LINQ 生成的SQL语句
  4. nsstring 空值比较_用比较器的nulls排序具有空值的列表
  5. 创新设计模式:单例模式
  6. 小心DLL链接静态库时的内存错误
  7. [react] 同时引用这三个库react.js、react-dom.js和babel.js它们都有什么作用?
  8. WordPress 默认主题自定义页面模板
  9. 【转】请让孩子输在起跑线上
  10. JAVA异常分类和处理
  11. GRUB 和 GRUB2 的区别
  12. OpenCV测试摄像头帧率
  13. MATLAB图像分割GUI
  14. 2022环境电器年度行业分析报告:洗地机同比增长357%,扫地机器人销量197万+
  15. VS2010如何添加MSCOMM控件
  16. BigDecimal
  17. 浅谈oracle索引
  18. C++一行输入多个数字(利用cin和空格)
  19. tp5框架实现推送消息到企业微信机器人(从需求分析、方案设计、研发阐述)
  20. 12AU7设计中的一个小技巧

热门文章

  1. 微信小程序实现简单下拉加载更多
  2. chrome浏览器启动页被篡改为360导航
  3. mysql replace rpad_mysql中的replace,concat,cast等等字符串函数
  4. 我的世界服务器怎么做无限的弓,我的世界制作无限弓流程介绍
  5. ArchLinux安装fcitx5-rime
  6. 效率神器----WOX
  7. rap技术原理_人们对Rap(说唱)理解的误区,你知道多少?
  8. 高增长神话破灭、巨头围剿“五环外”,拼多多的尽头是“拼夕夕”?
  9. 手持6位半电压信号源产品级实现记录(一)
  10. 【论文复现】ARBITRAR : User-Guided API Misuse Detectionl