在我的项目中声明的依赖项之一具有传递依赖性'com.google.guava:guava:15.0'.但是我在WAS/Weblogic上部署的应用程序由于已修复的CDI问题而无效'com.google.guava:guava:15.0:cdi1.0'.(相同版本,但有分类器)我需要告诉gradle在构建和打包过程中使用这个jar.我试图弄清楚如何使用jar特定的版本分类器来提取这种传递依赖.
试过以下方法:
compile 'com.google.guava:guava:15.0:cdi1.0'.但两个罐子都包含在最终的WAR中.明确添加了依赖关系并定义了解决策略:
configurations.all {
resolutionStrategy {
force 'com.google.guava:guava:15.0:cdi1.0'
}
}
Run Code Online (Sandbox Code Playgroud)
即使这样也行不通.
定义了检查和更改版本的解决方案策略.
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
if (details.requested.group + ":" + details.requested.name == 'com.google.guava:guava') {
details.useVersion "15.0:cdi1.0"
//details.useTarget "com.google.guava:guava:15.0:cdi1.0"
}
}
}
Run Code Online (Sandbox Code Playgroud)
即使这样也行不通.
需要您就如何解决此问题提出建议.
我没有找到这样的多图构造...当我想要这样做时,我遍历地图,并填充多图.还有其他方法吗?
final Map<String, Collection<String>> map = ImmutableMap.<String, Collection<String>>of(
"1", Arrays.asList("a", "b", "c", "c"));
System.out.println(Multimaps.forMap(map));
final Multimap<String, String> expected = ArrayListMultimap.create();
for (Map.Entry<String, Collection<String>> entry : map.entrySet()) {
expected.putAll(entry.getKey(), entry.getValue());
}
System.out.println(expected);
Run Code Online (Sandbox Code Playgroud)
第一个结果是,{1=[[a, b, c, c]]}但我期待{1=[a, b, c, c]}
我想获取我的字段的字符串值(它们可以是长字符串或任何对象的类型),
如果field为null而不是返回空字符串,我用guava做了这个;
nullToEmpty(String.valueOf(gearBox))
nullToEmpty(String.valueOf(id))
...
Run Code Online (Sandbox Code Playgroud)
但是如果变速箱为空,则返回null!不是空字符串,因为valueOf methdod返回字符串"null",这会导致错误.
有任何想法吗?
EDIt:有100个字段我寻找易于实现的东西
JavaDoc ImmutableSet说:
与
Collections.unmodifiableSet可以更改的单独集合的视图不同,此类的实例包含其自己的私有数据,并且永远不会更改.这个类对于公共静态最终集("常量集")很方便,也可以让你轻松地为调用者提供给你的类的集合制作一个"防御性副本".
但ImmutableSet仍然存储元素的参考,我无法弄清楚差异Collections.unmodifiableSet().样品:
StringBuffer s=new StringBuffer("a");
ImmutableSet<StringBuffer> set= ImmutableSet.of(s);
s.append("b");//s is "ab", s is still changed here!
Run Code Online (Sandbox Code Playgroud)
谁能解释一下呢?
我有两个对象列表; List<X>和List<Y>.X并且Y是看起来像的对象:
public class X {
String a;
String b;
String v;
String w;
String m;
String n;
}
public class Y {
String a;
String b;
List<A> aList;
}
public class A {
String v;
String w;
List<B> bList;
}
public class B {
String m;
String n;
}
Run Code Online (Sandbox Code Playgroud)
如何转变List<X>成List<Y>基于一个规则:
有些字段的值必须相等.
例如:
在List<Y>,对于一个对象Y,字段a的值必须相等.
在Y的字段中List<A>,对于一个对象A,字段w的值必须相等.
在A的字段中List<B>,对于一个对象B,字段m的值必须相等,依此类推.
Guava有这个方法,Lists#transform,但我不知道如何转换.
还是其他任何方式?
摘要几乎说明了一切.以下是相关的代码片段ImmutableList.createFromIterable():
if (element == null) {
throw new NullPointerException("at index " + index);
}
Run Code Online (Sandbox Code Playgroud)
我已经多次遇到这种情况,并且无法理解为什么通用库函数应该强加这个限制.
编辑1:通过"通用",我对95%的案例感到满意.但我认为我还没有写过100个电话ImmutableList.of(),并且不止一次被这个电话咬过.不过,也许我是一个离群值.:)
编辑2:我猜我最大的抱怨是,当与标准java.util集合交互时,这会产生"打嗝" .正如您在演讲中指出的那样,null集合中s的问题可能会显示在远离插入这些空值的位置.但是,如果我有一长串代码在一端将空值放在标准集合中并在另一端正确处理它们,那么我无法在整个过程中的任何时候替换谷歌集合类,因为它会立即抛出一个NullPointerException.
flatten在番石榴中是否有一种方法 - 或者将一种方法转换Iterable<Iterable<T>>为一种方法Iterable<T>?
我有一个Multimap<K, V>[sourceMultimap],我想返回键匹配某个谓词[keyPredicate]的所有值.所以目前我有:
Iterable<Collection<V>> vals = Maps.filterKeys(sourceMultimap.asMap(), keyPredicate).values();
Collection<V> retColl = ...;
for (Collection<V> vs : vals) retColl.addAll(vs);
return retColl;
Run Code Online (Sandbox Code Playgroud)
我查看了番石榴文档,但没有跳出来.我只是检查我没有错过任何东西.否则,我会将我的三行提取为一个简短的扁平泛型方法,并保持原样.
我想将双引号附加到数组中的字符串,然后将它们作为单个字符串连接(保留引号).有没有这样做的字符串库?我已经尝试过Apache commons StringUtils.join和Google番石榴中的Joiner类,但找不到附加双引号的内容.
我的输入将是一个数组,如下所述:
String [] listOfStrings = {"day", "campaign", "imps", "conversions"};
Run Code Online (Sandbox Code Playgroud)
所需的输出应如下所述:
String output = "\"day\", \"campaign\", \"imps\", \"conversions\"";
Run Code Online (Sandbox Code Playgroud)
我知道我可以遍历数组并附加引号.但是如果有的话,我想要一个更清洁的解决方案.
我想要一个包含1到500范围内整数的列表.是否有一些方法可以使用Guava(或简单的Java)创建此列表,而无需遍历范围并在我自己的范围内单独添加值码?
解决方案如下(在这里发布,因为一些答案提供了正确的信息,但没有一个给出完整的解决方案):
__PRE__
结果是类型 __CODE__