1.介绍

这篇烹饪书的文章被组织成小而集中的食谱和代码片段使用番石榴风格的集合。

格式为不断增长的代码示例列表不需要额外的解释——这意味着在开发过程中保持API的常用用法易于访问。

2.的食谱

向下转换List<父>到List<子>

- - - - - -请注意:这是Java中非协变泛型集合的一个解决方案

class CastFunction implements Function {@Override public final T apply(final F from) {return (T) from;}} List originalList = Lists.newArrayList();List List =列表。transform(originalList, new CastFunction());

没有番石榴的更简单的选择-涉及2次cast操作

List originalList = Lists.newArrayList();List List = (List) (List);

将可迭代对象添加到集合中

Iterable iter = Lists.newArrayList();Collection collector = Lists.newArrayList();iterable。addAll(收集器,iter);

根据自定义匹配规则检查集合是否包含元素

Iterable collection = Lists。newArrayList(“a”、“公元前”、“def”);boolean contains = Iterables。any(collection, new Predicate() {@Override public boolean apply(final String input) {return input.length() == 1;}});assertTrue(包含);

使用搜索的替代解决方案

Iterable collection = Sets。newHashSet(“a”、“公元前”、“def”);boolean contains = Iterables。找到(theCollection, new Predicate() { @Override public boolean apply(final String input) { return input.length() == 1; } }) != null; assertTrue(contains);

可选解决方案只适用于集合

Set collection =集合。newHashSet(“a”、“公元前”、“def”);boolean包含= !集合。filter(collection, new Predicate() {@Override public boolean apply(final String input) {return input.length() == 1;}}) .isEmpty ();assertTrue(包含);

NoSuchElementExceptionIterables.find什么也没找到

Iterable collection = Sets。newHashSet(“abcd”、“efgh”、“ijkl”);Predicate inputOfLengthOne = new Predicate() {@Override public boolean apply(final String input) {return input.length() == 1;}};String found = Iterables。找到(theCollection, inputOfLengthOne);

-这将抛出NoSuchElementException异常:

java.util.NoSuchElementException at com.google.common. collection . abstractiterator .next(AbstractIterator.java:154) at com.google.common. collection . iterators .find(Iterators.java:712) at com.google.common. collection . iterables .find(Iterators.java: 643)

- - - - - -解决方案:有一个重载找到方法它将默认返回值作为参数,并可以用它来调用对于期望的行为:

String found = Iterables。找到(theCollection, inputOfLengthOne, null);

从集合中删除所有空值

列表 values =列表。newArrayList("a", null, "b", "c");Iterable withoutNulls = Iterables。过滤器(价值观、Predicates.notNull ());

直接创建不可变的List/Set/Map

ImmutableList ImmutableList = ImmutableList。(“a”、“b”、“c”); >不可mutableset =不可mutableset(“a”、“b”、“c”);ImmutableMap。Of(“k1”,“v1”,“k2”,“v2”,“k3”,“v3”);

从一个标准集合中创建不可变的List/Set/Map

List mutablelist = Lists.newArrayList();ImmutableList ImmutableList = immutabllist . copyof (mutablelist);Set mutableset = Sets.newHashSet();不可mutableset 不可mutableset =不可mutableset . copyof (mutableset);Map mutablemap = Maps.newHashMap();ImmutableMap ImmutableMap = ImmutableMap. copyof (mutablemap);

使用构建器的替代解决方案

List mutablelist = Lists.newArrayList();ImmutableList ImmutableList = ImmutableList。<字符串> builder () .addAll (muttableList) .build ();Set mutableset = Sets.newHashSet(); >不可mutableset =不可mutableset<字符串> builder () .addAll (muttableSet) .build ();Map mutablemap = Maps.newHashMap();ImmutableMap。> <字符串,字符串生成器().putAll (muttableMap) .build ();

3.更多的番石榴食谱

番石榴是一个全面和非常有用的库-下面是一些更多的api在烹饪书的形式:

享受。

4.展望未来

正如我在开始时提到的,我正在对此进行试验不同的格式——烹饪书-尝试收集简单的普通任务使用番石榴集合在一个单独的地方。这种格式的重点是简单和速度,大多数食谱都是如此除了代码示例本身,没有其他解释

最后,我认为生活的文档-我会不断添加食谱和例子,因为我遇到他们。请随意在评论中提供更多内容,我会将它们纳入这本烹饪书中。

所有这些示例和代码片段的实现可以找到在GitHub-这是一个基于maven的项目,所以它应该很容易导入和运行。

通用的底部

开始使用Spring 5和Spring Boot 2,通过学习的春天课程:

>>看看这个课程
对这篇文章的评论关闭!