标签: guava

如何根据几个标准索引多图?

我有一个"SomeClass"列表,它可能包含很多功能相同的对象,我需要对它们进行分组.具有相同getName(),getInputDate(),getOutputDate()和getValue()的条目应组合在一起.我遇到了Multimap,这似乎是我需要的东西,但我无法想出如何将这些分组的优雅方式.

目前我已经将它们全部用作Multimap的关键,但我不认为这是最好的解决方案..

private ImmutableListMultimap<String, SomeClass> getGrouped() {
        return Multimaps.index
                (someClassList, new Function<SomeClass, String>() {
                    public String apply(SomeClass someClass) {
                        return someClass.getName() + someClass.getInputDate() + someClass
                                .getOutputDate() + someClass.getValue();
                    }
                });
}
Run Code Online (Sandbox Code Playgroud)

java guava

0
推荐指数
1
解决办法
93
查看次数

Iterables.transform没有迭代我的List

analyticsDatabases的类型 -

private final Iterable<Database> analyticsDatabases;
Run Code Online (Sandbox Code Playgroud)

我在方法中使用下面的代码片段,并且我在analyticsDatabases List中有一个元素.当我做一个for循环时,一切正常,但我很好奇为什么我的Iterables.transform不起作用.

Iterable<Iterable<ObjectId>> finalR = Iterables.transform(analyticsDatabases, new Function<Database, Iterable<ObjectId>>() { 
    @Nullable 
    @Override 
    public Iterable<ObjectId> apply(@Nullable Database database) { 
        if (database != null) { 
            return database.deleteItemsById(filterIds, storableType, writeAckStrategy); 
        } 

        `enter code here`

        return null; 
    } 
});
Run Code Online (Sandbox Code Playgroud)

java collections guava

0
推荐指数
1
解决办法
56
查看次数

为什么Guavas Ordering没有正确排序整数的字符串值?

我想知道为什么Guavas Ordering在以下代码中无法正常工作:

public static void main(String[] args) {
    List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
    System.out.println(Ordering.natural().isOrdered(integers));

    List<String> strings = Arrays.asList("1", "2", "3", "4", "5", "6", "7", "8", "9", "10");
    System.out.println(Ordering.natural().isOrdered(strings));

    List<String> strings2 = Arrays.asList("6417", "6418", "6419", "6420");
    System.out.println(Ordering.natural().isOrdered(strings2));
}
Run Code Online (Sandbox Code Playgroud)

输出:

true
false
true
Run Code Online (Sandbox Code Playgroud)

我预计会看到true3次.

有人可以解释为什么没有按预期排序吗?

sorting string guava

0
推荐指数
1
解决办法
49
查看次数

如何使用Guava缓存而不是HashMap?

我用来HashMap存储斐波那契值.

以下是此代码执行的输出:

Enter n: 500000
F(500000) = 2955561408 ... computed in 5,141 ms
Enter n: 500000
F(500000) = 2955561408 ... computed in 0 ms
Run Code Online (Sandbox Code Playgroud)

它缓存得很好,返回结果很好

我想更好地替换它Guava cache,我已经失去了任何利润.代码执行输出:

Enter n: 500000
F(500000) = 2955561408 ... computed in 5,184 ms
Enter n: 500000
F(500000) = 2955561408 ... computed in 5,086 ms
Run Code Online (Sandbox Code Playgroud)

这是程序代码:

public class CachedFibonacci {
    private static Map<BigDecimal, BigDecimal> previousValuesHolder;
    static {
        previousValuesHolder = new HashMap<>();
        previousValuesHolder.put(BigDecimal.ZERO, BigDecimal.ZERO);
        previousValuesHolder.put(BigDecimal.ONE, BigDecimal.ONE);
    }

    private static LoadingCache<BigDecimal, BigDecimal> cachedFibonacci = …
Run Code Online (Sandbox Code Playgroud)

java caching guava

0
推荐指数
1
解决办法
337
查看次数

Guava映射存储类实例作为键和int值

我试图用番石榴的集合来创建地图,将一个类实例存储的密钥和一个整数作为值.所以像这样:

核心价值

FooOne - 1
FooTwo - 2
FooThree - 3
FooFour - 4
Run Code Online (Sandbox Code Playgroud)

我现在在代码中有这个:

private ClassToInstanceMap<Object> classRanking = MutableClassToInstanceMap.create();
classRanking.put(FooOne.class, 0);
classRanking.put(FooTwo.class, 1);
classRanking.put(FooThree.class, 2);
classRanking.put(FooFour.class, 3);
Run Code Online (Sandbox Code Playgroud)

但是在运行时会抛出错误:

java.lang.ClassCastException: Cannot cast java.lang.Integer to com.jer.abc.test.FooOne
    at java.lang.Class.cast(Unknown Source)
    at com.google.common.collect.MutableClassToInstanceMap.cast(MutableClassToInstanceMap.java:82)
    at com.google.common.collect.MutableClassToInstanceMap.access$000(MutableClassToInstanceMap.java:36)
    at com.google.common.collect.MutableClassToInstanceMap$1.checkKeyValue(MutableClassToInstanceMap.java:67)
    at com.google.common.collect.MutableClassToInstanceMap$1.checkKeyValue(MutableClassToInstanceMap.java:64)
    at com.google.common.collect.MapConstraints$ConstrainedMap.put(MapConstraints.java:313)
    at com.fmr.gps.web.support.PortfolioInsightsSupport.populateRankingMap(PortfolioInsightsSupport.java:33)
    at com.fmr.gps.web.support.PortfolioInsightsSupport.<init>(PortfolioInsightsSupport.java:29)
    at com.fmr.gps.web.PortfolioInsightsSupportTest.setUp(PortfolioInsightsSupportTest.java:38)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) …
Run Code Online (Sandbox Code Playgroud)

java dictionary class instance guava

0
推荐指数
1
解决办法
284
查看次数

使用不同的泛型类型参数映射值

我想尝试做以下事情:

  private static final ImmutableMap<String, List<?>> lists = ImmutableMap.of(
      "A", new ArrayList<String>(),
      "B", new ArrayList<Integer>());
Run Code Online (Sandbox Code Playgroud)

本质上,我试图捕获的主要区别是不同的值具有不同的类型参数.但是这会给出错误:

Type mismatch: cannot convert from 
ImmutableMap<String,ArrayList<? extends Object&Serializable&Comparable<?>>>
to ImmutableMap<String,List<?>>
Run Code Online (Sandbox Code Playgroud)

是否有更好的方法来解决这个问题?

java generics guava

0
推荐指数
1
解决办法
378
查看次数

Guava CacheBuilder没有按预期工作

嗨,我是谷歌番石榴收藏品的新手,所以我需要收集,这将在一段时间内到期.所以我写了下面的代码,但它没有在过期时删除数据.任何人都可以告诉我代码的问题是什么.

Cache<String, Object> cache = CacheBuilder.newBuilder()
                .expireAfterAccess(2, TimeUnit.MILLISECONDS)
                .build();
        Object object = new Object();            
        cache.put(object.getId(), object);
        System.out.println("size :" + cache.size());
        Thread.sleep(50000);
        System.out.println("After Size :" + cache.size());
Run Code Online (Sandbox Code Playgroud)

我需要添加对象来映射,并且在到期时间之后它将从map中删除.但是在线程包含对象的地图之前和之后的代码.

java collections dictionary guava

0
推荐指数
1
解决办法
764
查看次数

需要高性能的Scala/Java集合

我正在寻找一个Scala(或Java/Guava)集合,它支持O(1)访问(并理想地删除)其最小元素以及O(log n)插入和删除任意元素.

思考?

java collections scala guava scala-collections

0
推荐指数
1
解决办法
163
查看次数

我可以结合java8(流,lambda)和番石榴?

在处理转换时(例如:transform List<People> peopleto List<Integer> ages,where People是包含属性的类age),通常有两种方法(对我而言):

  1. 使用java8:

    people.stream().map(p -> p.getAge()).collect(toList());

  2. 或用户guava2:

    Lists2.transform(people, People2AgeTransformer.INSTANCE);其中People2AgeTransformer是一个变换器,它实现了Function接口以返回年龄.

最近,我偶然发现java8和guava可以合并,因此代码可以是:

Lists2.transform(people, p->p.getAge());
Run Code Online (Sandbox Code Playgroud)

这段代码符合并运行没有任何错误,这让我感到困惑.该方法Lists2.transform()要求第二个args是接口的实现com.google.common.base.Function,而java8 lambda实际上是接口的实现java.util.function.Function.(好吧,它们都声明了一个B apply(A input)将A转换为B 的方法.)

我不明白为什么这会起作用,因为它们是不同包的两个不同界面.

java lambda guava java-stream

0
推荐指数
1
解决办法
1311
查看次数

将不可变列表传递给ImmutableList.copyOf()?

我有以下代码:

private static final ImmutableMultimap<String, String> namesToAddress;

public static List<String> getAddresses(String name){
  return ImmutableList.copyOf(namesToAddress.get(name));
}
Run Code Online (Sandbox Code Playgroud)

我的问题是防御性copyOf()在这里是必要的,因为get()仍然返回一个不可变列表?

注意我正在使用Google Guava的ImmutableMultiimap.

谢谢.

java immutability guava defensive-copy

0
推荐指数
1
解决办法
535
查看次数