标签: apache-commons-collection

Apache Commons Collections中是否存在与ArrayIterator的通用等价物?

ArrayIterator很方便(虽然我不需要这个reset功能),但是像其他的Commons Collections一样,它不使用泛型.我检查过Google Collections,但我没有看到相近的等价物.我错过了吗?是否有另外一个具有类似声誉和质量的图书馆,前两个图书馆提供这样的东西?谢谢.

java arrays collections guava apache-commons-collection

5
推荐指数
1
解决办法
2247
查看次数

我如何学习使用Java commons-collections?

我知道,奇怪的标题让我解释一下.

我是最熟悉C#和Javascript的开发人员.我完全沉浸在那些半功能的世界中,以至于我的大多数代码都是关于映射/缩减/过滤集合.在C#中,这意味着我几乎无处不在地使用LINQ,在Javascript中它是Underscore.js和jQuery.

我目前被分配到一个正在进行的Java项目,我感到相当窒息.我根本就没有想到"创建一个数组,从一个到另一个地方改变东西".我可以(并且确实)使用实现接口的匿名类型创建我自己的主map/reduce函数版本,但为什么要重新发明轮子?我目前正在进行的项目已经有了commons-collections-3.1.jar,并且查看了包含它的类似乎可能可以完成我想要的所有内容.

对于我的生活,我找不到如何实际使用它.浏览其中的几十个课程并不是很有帮助,我唯一可以谷歌的是api doc,它同样有用.

你如何使用它来映射/选择,过滤/在哪里,减少/聚合?有没有在这个库上提供实际教程的地方?

java mapreduce apache-commons-collection

5
推荐指数
1
解决办法
3797
查看次数

如何初始化一个公共静态最终只读LinkedMap(双向映射)

我想创建一个

public static final LinkedMap myMap;
Run Code Online (Sandbox Code Playgroud)

在某个地方,我发现了类似地图的地图:

 public class Test {
        private static final Map<Integer, String> MY_MAP = createMap();

        private static Map<Integer, String> createMap() {
            Map<Integer, String> result = new HashMap<Integer, String>();
            result.put(1, "one");
            result.put(2, "two");
            return Collections.unmodifiableMap(result);
        }
    }
Run Code Online (Sandbox Code Playgroud)

但我不能将'unmodifiableMap'方法应用于它LinkedMap.有谁能够帮我?有可能吗?

java final map apache-commons-collection

5
推荐指数
1
解决办法
6295
查看次数

一个用于从Set中获取子列表的衬垫

是否有一个单行(可能来自Guava或Apache Collections)从一组中获取子列表.在内部它应该做这样的事情:

public <T> List<T> sublist(Set<T> set, int count) {
  Iterator<T> iterator = set.iterator();
  List<T> sublist = new LinkedList<T>();
  int pos = 0;
  while (iterator.hasNext() && pos++ < count) {
    sublist.add(iterator.next());
  }
  return sublist;
}
Run Code Online (Sandbox Code Playgroud)

显然,如果没有足够的元素,它必须尽可能多地返回.

java guava apache-commons-collection

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

使用自定义值集合类型创建Commons Collections MultiValueMap

Apache Commons Collections库的4.0版本增加了泛型支持.我无法转换代码以利用它:

我想要一个MultiValueMap以字符串作为键,以及字符串的集合作为值.但:

  1. 键应该保留插入顺序(所以我通过装饰来创建多值映射LinkedHashMap)
  2. 每个键的值应该是唯一的并保留插入顺序(所以我希望值Collection类型为a LinkedHashSet).

我能得到的最接近的是:

MultiValueMap<String, String> orderedMap = MultiValueMap.multiValueMap(
    new LinkedHashMap<String, Collection<String>>(), 
    LinkedHashSet.class
);
Run Code Online (Sandbox Code Playgroud)

但是这会产生错误:

multiValueMap(Map<K,? super C>, Class<C>)类型中 的方法MultiValueMap不适用于参数 (LinkedHashMap<String,Collection<String>>, Class<LinkedHashSet>)

所以现在我在仿制药地狱.任何建议都是最受欢迎的.

在4.0版之前,我通过以下方式实现了这一目标:

MultiValueMap orderedMap = MultiValueMap.decorate(
    new LinkedHashMap<>(), 
    LinkedHashSet.class
);
Run Code Online (Sandbox Code Playgroud)

简单!我提供了LinkedHashMap使用MultiValueMap行为进行装饰,并指定LinkedHashSet要用作值的collection()的类型.但是,这需要铸造,当我打电话put()get(),所以我希望能够使用4.0提供的新的通用版本.

java generics apache-commons-collection

5
推荐指数
1
解决办法
6636
查看次数

发现两个列表之间的区别

在java中假设我有2个列表

List<Object1> list1
List<Object2> list2

object1.getName(); returns a String
object2.getName(); return a String
Run Code Online (Sandbox Code Playgroud)

有没有办法比较名称,并得到两个列表的差异

这些2个对象在第三方库中定义,我不能覆盖equals和compareto方法

我赞成googles Guava或commons集合库

Sets.symmetricDifference(Set1, Set2)要求传入2,即使我使用Sets.newHashSet(lis1)和Sets.newHashSet(lis2)创建两个集合,但它们仍然在集合中具有不同类型的对象.

或者在公共中CollectionUtils.disjunction(lis1, list2),列表仍然必须包含相同的对象类型

没有做2个昂贵的for循环,还有其他方法吗?

java apache-commons guava apache-commons-collection

5
推荐指数
1
解决办法
3387
查看次数

如何迭代MultiKeyMap?

我正在使用提供多键值对的commons-collections中的MultiKeyMap.我有3个键是字符串.我有两个问题,我看不出如何解决.

如何迭代所有多键值对?使用简单的HashMap,我知道它.

其次,如何修复前两个键的所有多键值对?这意味着我想得到这样的东西,multiKey.get("key1","key2",?);其中没有指定第三个键.

java dictionary multikey apache-commons-collection

5
推荐指数
1
解决办法
5668
查看次数

带比较器的 Java 8 流过滤器

MyObject我想根据字段过滤列表values。在这种情况下:如果 on 的任何值MyObject::getValues小于给定value,则谓词为 false。我还没有找到使用 Stream API 的方法,所以我尝试ComparatorPredicateApache. 这是我的尝试:

private Predicate<MyObject> valueGreaterThanOrEqualTo(ValueObject value){
    return myObject -> myObject.getValues().stream()
            .noneMatch(v -> ComparatorPredicate.comparatorPredicate(value, new ValueComparator(), ComparatorPredicate.Criterion.LESS)
                    .evaluate(v));
}
Run Code Online (Sandbox Code Playgroud)

然而,这会导致:

Caused by: java.lang.ClassCastException: Cannot cast java.lang.Boolean to com.ValueObject
    at java.lang.Class.cast(Class.java:3369)
    at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
    at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
    at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
    at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
    at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
    at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
    at java.util.ArrayList$ArrayListSpliterator.tryAdvance(ArrayList.java:1351)
    at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126)
    at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:498)
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
    at java.util.stream.MatchOps$MatchOp.evaluateSequential(MatchOps.java:230)
    at java.util.stream.MatchOps$MatchOp.evaluateSequential(MatchOps.java:196)
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.noneMatch(ReferencePipeline.java:459)
Run Code Online (Sandbox Code Playgroud)

所以我的问题是为什么会发生 ClassCastException 以及如何解决它和/或如何使用其他(更好的?)解决方案解决我的问题?

更新: …

java predicate comparator apache-commons-collection java-stream

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

Map <String,List <String >>实现,公开视图Map"last values"

我正在查看各种google-collections(或者也就是Apache commons集合)类,我希望在为我的用例找到最合适的Map实现方面有所帮助.我对本土地图不感兴趣.

以下是一些要求:

  • 我有一个Map<String, List<String>>数据结构(A)
  • 大多数时候,我想暴露一个Map<String, String>只读视图(B).
  • (B)特点:
    • (B)中的键对应于(A)中的键
    • (B)中的值对应于"(A)中的最后值",即 B.get(X) == A.get(X).get(A.get(X).size() - 1)
    • (A)中的值可能不是空列表

我知道ArrayListMultimap,但它没有公开满足我对(B)要求的观点.

有什么指针吗?

java guava apache-commons-collection

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

Java Collection用于特殊滚动,循环队列

我正在寻找类似的东西ConcurrentLinkedQueue,但有以下行为:

  • 当我peek()/ poll()队列中,它检索HEAD,也不会删除它,并且随后前进HEAD一个节点向TAIL
  • 当HEAD == TAIL时,下次I peek()/时poll(),HEAD重置为其原始节点(因此为"循环"行为)

所以,如果我像这样创建队列:

MysteryQueue<String> queue = new MysteryQueue<String>();
queue.add("A"); // The "original" HEAD
queue.add("B");
queue.add("C");
queue.add("D"); // TAIL

String str1 = queue.peek(); // Should be "A"
String str2 = queue.peek(); // Should be "B"
String str3 = queue.peek(); // Should be "C"
String str4 = queue.peek(); // Should be "D"
String str5 = queue.peek(); // Should be "A" again
Run Code Online (Sandbox Code Playgroud)

以这种方式,我可以整天偷看/轮询,队列将一遍又一遍地滚动我的队列.

JRE是否附带这样的东西?如果没有,可能是Apache Commons Collections或其他第三方库中的某些东西?提前致谢!

java queue collections circular-buffer apache-commons-collection

3
推荐指数
1
解决办法
1443
查看次数