标签: guava

为什么Guava的ImmutableList有这么多重载的()方法?

我只是看着番石榴ImmutableList,我注意到这个of()方法超载了12次.

在我看来,他们所需要的只是:

static <E> ImmutableList<E> of();
static <E> ImmutableList<E> of(E element); // not even necessary
static <E> ImmutableList<E> of(E... elements);
Run Code Online (Sandbox Code Playgroud)

有这么多类似变化的原因是什么?

java overloading guava

38
推荐指数
2
解决办法
2004
查看次数

针对番石榴的ProGuard配置,具有混淆和优化功能

正在寻找Guava的ProGuard配置,它将进行模糊处理和优化,因为网站上提供的默认配置不会.

不仅我不能让它导出我的apk,我一直得到:

Warning: com.google.common.collect.MinMaxPriorityQueue: 
    can't find referenced field 'int UNSET_EXPECTED_SIZE' in class  
    com.google.common.collect.MinMaxPriorityQueue$Builder
You should check if you need to specify additional program jars.
Run Code Online (Sandbox Code Playgroud)

java android proguard guava

38
推荐指数
7
解决办法
2万
查看次数

如何从Guava中的List获取max()元素

假设我们有一个项目集合:

class Item {
    public String title;
    public int price;
}

List<Item> list = getListOfItems();
Run Code Online (Sandbox Code Playgroud)

我想从Guava库中获得一个具有最大价格的物品(订购,我推测).我的意思是类似于这个Groovy代码:

list.max{it.price}
Run Code Online (Sandbox Code Playgroud)

我怎么做?效率如何?

java guava

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

不能在Kepler下安装Maven for Eclipse 1.5.0插件

我下载了Eclipse Kepler,并尝试从其更新站点安装M2Eclipse .

选择Maven Integration for Eclipse后,我单击Next并出现以下错误:

缺少要求:Maven Integration for Eclipse 1.5.0.20140606-0033(org.eclipse.m2e.core 1.5.0.20140606-0033)需要'bundle com.google.guava [14.0.1,16.0.0)'但无法找到

所以我通过互联网搜索了解如何安装Guava Eclipse插件.有人说它来自Eclipse市场,但无法下载.我下载了二进制文件,并尝试将其复制到Eclipse的插件目录中.结果仍然相同.

cp ~/Downloads/guava-16.0.1.jar /Applications/eclipse/plugins/com.google.guava_16.0.1.v1234.jar
Run Code Online (Sandbox Code Playgroud)

如何为开普勒安装m2e插件?

eclipse maven guava m2e

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

将列表的元素分组到子列表中(可能使用guava)

我想分组列表的元素.我现在这样做:

public static <E> List<List<E>> group(final List<E> list, final GroupFunction<E> groupFunction) {

    List<List<E>> result = Lists.newArrayList();

    for (final E element : list) {

        boolean groupFound = false;
        for (final List<E> group : result) {
            if (groupFunction.sameGroup(element, group.get(0))) {
                group.add(element);
                groupFound = true;
                break;
            }
        }
        if (! groupFound) {

            List<E> newGroup = Lists.newArrayList();
            newGroup.add(element);
            result.add(newGroup);
        }
    }

    return result;
}

public interface GroupFunction<E> {
    public boolean sameGroup(final E element1, final E element2);
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点,最好是使用番石榴?

java grouping function list guava

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

为什么没有getFirst(可迭代)方法?

Iterables提供了两种方法getLast

 public static <T> T getLast(Iterable<T> iterable);
 public static <T> T getLast(Iterable<T> iterable, @Nullable T defaultValue);
Run Code Online (Sandbox Code Playgroud)

但只有一个 getFirst

 public static <T> T getFirst(Iterable<T> iterable, @Nullable T defaultValue);
Run Code Online (Sandbox Code Playgroud)

是否存在破坏对称性的设计/实施原因?

java collections iterable api-design guava

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

Guava ImmutableMap的访问速度明显慢于HashMap

在研究某些高吞吐量数据结构的内存基准测试时,我意识到我只能使用ImmutableMap一点点重构.

认为这将是一个改进,我把它扔进了组合中并且惊讶地发现它不仅比它HashMap在单线程环境中慢,而且看起来一直比它慢ConcurrentHashMap!

你可以在这里看到完整的基准:https://bitbucket.org/snippets/dimo414/89K7G

测试的内容非常简单,需要花费多长时间才能获得地图中可能存在的大量随机字符串.

public static void timeAccess(Map<String,String> map) {
    Random rnd = new Random(seed);
    int foundCount = 0;

    long start = System.nanoTime();

    for(int i = 0; i < loop; i++) {
        String s = map.get(RndString.build(rnd));
        if(s != null)
            foundCount++;
    }

    long stop = System.nanoTime() - start;

    System.out.println("Found "+foundCount+" strings out of "+loop+" attempts - "+
        String.format("%.2f",100.0*foundCount/loop)+" success rate.");
    System.out.println(map.getClass().getSimpleName()+" took "+
        String.format("%.4f", stop/1_000_000_000.0)+" seconds.");
    System.out.println();
}
Run Code Online (Sandbox Code Playgroud)

对a HashMap,a ConcurrentHashMap …

java performance benchmarking hashmap guava

36
推荐指数
2
解决办法
7951
查看次数

按顺序反向排序列表

我有直接的List list1. List<String> list = Ordering.natural().sortedCopy(asu2);

如何改变秩序.我不知道如何从extends类重写方法,请用例子写或清楚说明.

java sorting list guava

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

以原子方式递增存储在ConcurrentHashMap中的计数器

我想从网络应用中的各个地方收集一些指标.为了简单起见,所有这些都是计数器,因此唯一的修饰符操作是将它们递增1.

增量将是并发的并且经常是.读取(转储统计信息)是一种罕见的操作.

我在考虑使用ConcurrentHashMap.问题是如何正确递增计数器.由于地图没有"增量"操作,我需要首先读取当前值,增加它而不是将新值放在地图中.没有更多代码,这不是原子操作.

是否有可能在没有同步的情况下实现这一点(这会破坏ConcurrentHashMap的目的)?我需要看看番石榴吗?

谢谢你的任何指示.


PS
有一个关于SO的相关问题(在Java中增加Map值的最有效方法)但是侧重于性能而不是多线程

更新
对于那些通过搜索同一主题到达这里的人:除了下面的答案之外,还有一个有用的演示文稿,它偶然涵盖了相同的主题.见幻灯片24-33.

java concurrency multithreading concurrenthashmap guava

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

Google-guava checkNotNull和IntelliJ IDEA的"可能产生java.lang.NullPointerException"

有没有办法抑制此警告:

MyClass object = null;

/*Some code that 'might' set this object but I know it will*/      


Preconditions.checkNotNull(object); 
//when "assert object != null" is used here no warning is shown

merged.setName(dRElement.getName());
//"May produce 'java.lang.NullPointerException'" warning here 
Run Code Online (Sandbox Code Playgroud)

我正在使用IntelliJ IDEA 10.5,我知道这个警告是不必要的,但是我想在这里压制它并避免切换检查.

intellij-idea nullpointerexception inspection guava

35
推荐指数
2
解决办法
1万
查看次数