标签: guava

如何使用另一个列表中的对象的属性创建新列表

想象一下,我有一些特定对象的列表:

List<Student>
Run Code Online (Sandbox Code Playgroud)

我需要生成包含另一个列表idsStudents在上面的列表:

List<Integer>
Run Code Online (Sandbox Code Playgroud)

避免使用循环,是否可以通过使用apache集合番石榴来实现这一点?

哪种方法对我的情况有用?

java collections list guava java-stream

73
推荐指数
5
解决办法
7万
查看次数

如何JUnit测试两个List <E>包含相同顺序的相同元素?

上下文

我正在为该类编写一个简单的JUnit测试MyObject.

MyObject可以从静态工厂方法,该方法的可变参数来创建字符串.

MyObject.ofComponents("Uno", "Dos", "Tres");
Run Code Online (Sandbox Code Playgroud)

在存在期间的任何时候MyObject,客户端都可以通过该方法以List <E>的形式检查它所创建的参数.getComponents().

myObject.ofComponents(); // -> List<String>: { "Uno", "Dos", "Tres" }
Run Code Online (Sandbox Code Playgroud)

换句话说,MyObject两者都会记住并公开使其存在的参数列表.关于这份合同的更多细节:

  • 顺序getComponents将与为对象创建选择的顺序相同
  • 允许并按顺序保留重复的后续String组件
  • 行为null是未定义的(其他代码保证没有null到达工厂)
  • 在对象实例化之后,没有办法改变组件列表

我正在编写一个简单的测试,它MyObjectString列表中创建一个并检查它是否可以返回相同的列表.getComponents().我立即这样做,但这应该发生在一个真实的代码路径中的距离.

在这里我的尝试:


List<String> argumentComponents = Lists.newArrayList("One", "Two", "Three");
List<String> returnedComponents =
    MyObject.ofComponents(
        argumentComponents.toArray(new String[argumentComponents.size()]))
        .getComponents();
assertTrue(Iterables.elementsEqual(argumentComponents, returnedComponents));
Run Code Online (Sandbox Code Playgroud)

  • 谷歌番石榴 Iterables.elementsEqual()最好的办法,只要我有库在我的构建路径,那些两个列表比较?这是我一直在苦恼的事情; 我应该使用这个辅助方法,它超过了 …

java junit guava

72
推荐指数
6
解决办法
9万
查看次数

使用Java管理高度重复的代码和文档

高度重复的代码通常是一件坏事,并且有一些设计模式可以帮助减少这种情况.然而,由于语言本身的限制,有时它是不可避免的.以下示例来自java.util.Arrays:

/**
 * Assigns the specified long value to each element of the specified
 * range of the specified array of longs.  The range to be filled
 * extends from index <tt>fromIndex</tt>, inclusive, to index
 * <tt>toIndex</tt>, exclusive.  (If <tt>fromIndex==toIndex</tt>, the
 * range to be filled is empty.)
 *
 * @param a the array to be filled
 * @param fromIndex the index of the first element (inclusive) to be
 *        filled with the specified value
 * @param toIndex …
Run Code Online (Sandbox Code Playgroud)

java maintenance preprocessor guava

70
推荐指数
3
解决办法
5003
查看次数

Lists.newArrayList与新的ArrayList

创建List字符串的最佳构造是什么?是Lists.newArrayList()(来自番石榴)还是new ArrayList()

这只是个人偏好吗?
或者只是键入泛型类型推断?
或者使用Lists.newArrayList()是否有任何理论或实践价值?

java generics guava

70
推荐指数
3
解决办法
8万
查看次数

错误:com.android.builder.dexing.DexArchiveBuilderException:无法处理guava-21.0.jar Android 3.1 Dev Channel

更新我的依赖版本后AndroidStudio3.1,我开始收到以下错误:

    Information:Gradle tasks [:app:assembleDebug]
Error:com.android.builder.dexing.DexArchiveBuilderException: Failed to process C:\Users\Blabla\.gradle\caches\modules-2\files-2.1\com.google.guava\guava\21.0\3a3d111be1be1b745edfa7d91678a12d7ed38709\guava-21.0.jar
Error:com.android.builder.dexing.DexArchiveBuilderException: Error while dexing.
Error:com.android.tools.r8.ApiLevelException: Default interface methods are only supported starting with Android N (--min-api 24): java.util.Collection com.google.common.collect.BiMap.values()
Error:Execution failed for task ':app:transformClassesWithDexBuilderForDebug'.
> com.android.build.api.transform.TransformException: com.android.builder.dexing.DexArchiveBuilderException: com.android.builder.dexing.DexArchiveBuilderException: Failed to process C:\Users\Blabla\.gradle\caches\modules-2\files-2.1\com.google.guava\guava\21.0\3a3d111be1be1b745edfa7d91678a12d7ed38709\guava-21.0.jar
Information:BUILD FAILED in 6s
Information:4 errors
Information:0 warnings
Information:See complete output in console
Run Code Online (Sandbox Code Playgroud)

我已经清理并重建了项目.检查了我的"multiDexEnabled true"''编译'com.android.support:multidex:1.0.2'已添加.

我还可以做些什么?

编辑:添加build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 27
    buildToolsVersion '26.0.2'
    defaultConfig {
        applicationId "com.blabla"
        minSdkVersion 19
        targetSdkVersion …
Run Code Online (Sandbox Code Playgroud)

android guava android-gradle-plugin android-studio-3.0

65
推荐指数
3
解决办法
7万
查看次数

什么是番石榴checkNotNull的重点

我是Guava的新手(说实话,我不是"非常新的",我是这个主题的新手)所以我决定阅读一些文档并在阅读时非常惊讶:

com.google.common.base.Preconditions.checkNotNull(...)

我不明白这个方法的意义.这意味着,而不是做:

myObject.getAnything();
Run Code Online (Sandbox Code Playgroud)

(这可能导致NullPointerExceptionif myObject为null)

我应该用

checkNotNull(myObject).getAnything();
Run Code Online (Sandbox Code Playgroud)

抛出NullPointerException如果myObject是空和返回myObject,如果它不为空.

我很困惑,这可能是有史以来最愚蠢的问题,但......

这有什么意义?考虑到我能想到的任何情况,这两行与结果完全相同.

我甚至认为后者更具可读性.

所以我一定错过了什么.它是什么?

java null preconditions guava

64
推荐指数
3
解决办法
3万
查看次数

一个确保元素唯一性的队列?

我正在寻找java.util.Queue的实现或Google集合中表现得像Queue的东西,但也要确保队列中的每个元素都是唯一的.(所有进一步插入都没有效果)

这是可能的,还是我必须手工完成?

现在我正在使用一个带有LinkedList实现的Queue,并在插入之前检查唯一性.(我使用侧面Map来执行此操作,在队列之前/之后添加/删除侧面图中的元素).我不太喜欢它.

欢迎任何输入.如果它不在java.util包中,那么也许这是一个坏主意?

java queue collections unique-constraint guava

61
推荐指数
4
解决办法
4万
查看次数

我应该为每个可能返回null的方法使用Java8/Guava Optional吗?

可选用于表示可为空的对象,此类的一些用途包括

  1. 作为方法返回类型,作为返回null的替代方法,
    表示没有可用的值
  2. 区分"未知"(例如,不存在于地图中)和"已知没有值"(存在于地图中,值为
    Optional.absent())
  3. 在不支持null的集合中包装可存储的引用以进行存储(尽管还有其他几种方法应该首先考虑)

对于第一种情况,我是否需要在所有可空的返回方法中返回Optional?

java optional guava java-8

60
推荐指数
3
解决办法
2万
查看次数

在使用Guava转换集合时是否有一种优雅的方法来删除空值?

在使用Google Collections(更新:Guava)时,我有一个关于简化某些Collection处理代码的问题.

我有一堆"计算机"对象,我想最终收集他们的"资源ID".这样做是这样的:

Collection<Computer> matchingComputers = findComputers();
Collection<String> resourceIds = 
    Lists.newArrayList(Iterables.transform(matchingComputers, new Function<Computer, String>() {
    public String apply(Computer from) {
        return from.getResourceId();
    }
}));
Run Code Online (Sandbox Code Playgroud)

现在,getResourceId()可能会返回null(并且现在更改它不是一个选项),但在这种情况下,我想从结果String集合中省略null.

这是过滤掉空值的一种方法:

Collections2.filter(resourceIds, new Predicate<String>() {
    @Override
    public boolean apply(String input) {
        return input != null;
    }
});
Run Code Online (Sandbox Code Playgroud)

你可以像这样把所有这些放在一起:

Collection<String> resourceIds = Collections2.filter(
Lists.newArrayList(Iterables.transform(matchingComputers, new Function<Computer, String>() {
    public String apply(Computer from) {
        return from.getResourceId();
    }
})), new Predicate<String>() {
    @Override
    public boolean apply(String input) {
        return input != null; …
Run Code Online (Sandbox Code Playgroud)

java collections refactoring guava

59
推荐指数
4
解决办法
3万
查看次数

如何使用Guava将可能的空值转换为默认值?

如果传递的对象引用是,那么Guava是否提供了获取默认值的方法null?我正在寻找类似的东西<T> T nullToDefault(T obj, T default),如果obj是,则返回默认值.null

在stackoverflow上,我一无所获.我只是在寻找纯粹的番石榴解决方案(如果有的话)!

我在Gauva 10 API中找不到任何东西,只com.google.common.base.Objects看起来很有希望,但缺少类似的东西.

java guava

54
推荐指数
7
解决办法
6万
查看次数