Eclipse Collections 10.0ã®æ°æ©è½ - Part 1 #EclipseCollections
æ¬è¨äºã¯Donald Raabæ°ã«ãã New Features of Eclipse Collections 10.0 — Part 1 - Donald Raab - Medium ãå ã«ããæ¥æ¬èªçã®è¨äºã§ããæ¥æ¬èªã§ããããããæ å ±ã¨ãªãããã«é©å®ç·¨éãã¦ãããæ¥æ¬èªè¨³ã¨ã¯éã£ã¦å¿ ãããå ã®æç« ã訳ãããã®ã§ã¯ããã¾ããï¼æ¬äººã«rewriteã®è¨±å¯ãããã£ã¦ããã¾ãï¼ãåæãåèã«ãããå ´åã¯ä¸è¨ãªã³ã¯ããã©ããã
Eclipse Collections 10.0ã®æ°æ©è½ãç¨ããã³ã¼ãä¾ãç´¹ä»ãã¦ããã¾ãã
ãµããªã¼
æ¬è¨äºã§ã¯ãEclipse Collections 10.0がリリースされました #EclipseCollections - itohiro73’s blog ã§æãã26åã®æ°æ©è½ã®ãã¡æåã®10åãç´¹ä»ãã¾ãã
1. MultiReaderList/Bag/Set
ã«ç¹åããInterface
Eclipse Collectionsã«ã¯ãé·ããmulti-reader対å¿ã®ã³ã¬ã¯ã·ã§ã³å®è£ ãåå¨ãã¦ãã¾ãããããããã«å¯¾å¿ããã¤ã³ã¿ã¼ãã§ã¼ã¹ã¯åå¨ãã¦ãã¾ããã§ããã10.0以éã§ã¯ãããã®ã¤ã³ã¿ã¼ãã§ã¼ã¹ãå©ç¨ã§ããããã«ãªã£ã¦ãã¾ãã
@Test public void multiReaderList() { MultiReaderList<String> list = Lists.multiReader.with("1", "2", "3"); list.withWriteLockAndDelegate(backingList -> { Iterator<String> iterator = backingList.iterator(); iterator.next(); iterator.remove(); }); Assert.assertEquals(Lists.mutable.with("2", "3"), list); }
2. ããªããã£ãListããããªããã£ãStreamãçæããå®è£
æ®éã®ListããStreamãçæããã®ã¯ç°¡åã§ãããEclipse Collections 9.xã¾ã§ã¯ããªããã£ãListããStreamãçæããã®ã¯ç°¡åã§ã¯ããã¾ããã§ããã10.0ããã¯ä¸è¨ã®ããã«ããªããã£ãListããããªããã£ãStreamãç°¡åã«çæã§ãã¾ãã
@Test public void primitiveListToPrimitiveStream() { IntStream intStream1 = IntLists.mutable.with(1, 2, 3, 4, 5) .primitiveStream(); IntStream intStream2 = IntLists.immutable.with(1, 2, 3, 4, 5) .primitiveStream(); LongStream longStream1 = LongLists.mutable.with(1L, 2L, 3L, 4L, 5L) .primitiveStream(); LongStream longStream2 = LongLists.immutable.with(1L, 2L, 3L, 4L, 5L) .primitiveStream(); DoubleStream doubleStream1 = DoubleLists.mutable.with(1.0, 2.0, 3.0, 4.0, 5.0) .primitiveStream(); DoubleStream doubleStream2 = DoubleLists.immutable.with(1.0, 2.0, 3.0, 4.0, 5.0) .primitiveStream(); }
3. toMap
ã«ãããã¿ã¼ã²ããMapã®ãµãã¼ã
toMap
ã®ãªã¼ãã¼ãã¼ãã¨ãã¦ãã¿ã¼ã²ããã®Mapãå¼æ°ã¨ãã¦ã¨ãã¡ã½ããã追å ããã¾ããã
@Test public void toMapWithTarget() { MutableList<Integer> list = Lists.mutable.with(1, 2, 3, 4, 5); Map<String, Integer> map = list.toMap(String::valueOf, each -> each, new LinkedHashMap<>()); Map<String, Integer> expected = new LinkedHashMap<>(); expected.put("1", 1); expected.put("2", 2); expected.put("3", 3); expected.put("4", 4); expected.put("5", 5); Assert.assertEquals(expected, map); }
4. MutableMapIterable.removeAllKeys
ã®å®è£
Mapã«å¯¾ãã¦ãããSetã«å«ã¾ããè¦ç´ ã«å¯¾å¿ãããã¼ãåé¤ãã removeAllKeys
ã¡ã½ãããå©ç¨ã§ãã¾ãã
@Test public void removeAllKeys() { MutableMap<Integer, String> map = Maps.mutable.with(1, "1", 2, "2", 3, "3"); map.removeAllKeys(Sets.mutable.with(1, 3)); Assert.assertEquals(Maps.mutable.with(2, "2"), map); }
5 RichIterable.toBiMap
ã®å®è£
Eclipse Collections 10.0ã§ã¯ãRichIterable
ãBiMap
ã«å¤æãããã¨ãã§ãã¾ãã
@Test public void toBiMap() { MutableBiMap<String, Integer> expected = BiMaps.mutable.with("1", 1, "2", 2, "3", 3); MutableBiMap<String, Integer> biMap = Lists.mutable.with(1, 2, 3).toBiMap(String::valueOf, i -> i); Assert.assertEquals(expected, biMap); }
6 Multimap.collectKeyMultiValues
ã®å®è£
Multimapã«å¯¾ãã¦ãkeyã¨valueã®ä¸¡æ¹ã«å¯¾ãã¦functionãé©ç¨ãã¦å¤æã§ããcollectKeyMultiValues
ã¡ã½ããã追å ã«ãªãã¾ããã
@Test public void collecKeyMultiValues() { MutableListMultimap<String, String> multimap = Multimaps.mutable.list.with( "nj", "Monmouth", "nj", "Bergen", "nj", "Union"); MutableBagMultimap<String, String> transformed = multimap.collectKeyMultiValues( String::toUpperCase, String::toUpperCase); Assert.assertEquals(Multimaps.mutable.bag.with( "NJ", "MONMOUTH", "NJ", "BERGEN", "NJ", "UNION"), transformed); }
7 ã³ã¬ã¯ã·ã§ã³ãã¡ã¯ããªã«ãããfromStream(Stream)
ã®å®è£
List
ãSet
ãBag
ãStack
ã®ããããã®ãã¡ã¯ããªã¯ã©ã¹ã«ããã¦ãStreamããã³ã¬ã¯ã·ã§ã³ãçæããfromStream
ã¡ã½ãããå©ç¨ã§ããããã«ãªãã¾ããã
@Test public void fromStreamOnCollectionFactories() { MutableList<Integer> list = Lists.mutable.fromStream(Stream.of(1, 2, 3, 4, 5)); Assert.assertEquals( Lists.mutable.with(1, 2, 3, 4, 5), list); MutableSet<Integer> set = Sets.mutable.fromStream(Stream.of(1, 2, 3, 4, 5)); Assert.assertEquals( Sets.mutable.with(1, 2, 3, 4, 5), set); MutableBag<Integer> bag = Bags.mutable.fromStream(Stream.of(1, 2, 3, 4, 5)); Assert.assertEquals( Bags.mutable.with(1, 2, 3, 4, 5), bag); MutableStack<Integer> stack = Stacks.mutable.fromStream(Stream.of(1, 2, 3, 4, 5)); Assert.assertEquals( Stacks.mutable.with(1, 2, 3, 4, 5), stack); }
8 LazyIterate.cartesianProduct
ã®å®è£
ç´ç©éåãæ±ããcartesianProduct
ã¡ã½ããã¯ãã¨ãã¨ã¦ã¼ãã£ãªãã£ã¡ã½ããã¨ãã¦åå¨ãã¦ãã¾ããããSet
ã®ã¿ããã©ã¡ã¼ã¿ã¼ã¨ãã¦ã¨ã£ã¦ãããããä»ã®Iterable
ã«å¯¾ãã¦ã¯ã¯æ示çã«Set
ã«å¤æãã¦ããå¼ã³åºãå¿
è¦ãããã¾ãããä»åå°å
¥ãããæ°ãã LazyIterate.cartesianProduct
ã§ã¯ã©ã®ãããªIterable
ãããç´ç©éåãæ±ãããã¨ãã§ãã¾ãã
@Test public void cartesianProduct() { MutableList<Integer> numbers = Lists.mutable.with(1, 2, 3); MutableList<String> letters = Lists.mutable.with("A", "B", "C"); MutableList<Pair<String, Integer>> pairs = LazyIterate.cartesianProduct(letters, numbers).toList(); MutableList<Pair<String, Integer>> expected = Lists.mutable.with( Tuples.pair("A", 1), Tuples.pair("A", 2), Tuples.pair("A", 3), Tuples.pair("B", 1), Tuples.pair("B", 2), Tuples.pair("B", 3), Tuples.pair("C", 1), Tuples.pair("C", 2), Tuples.pair("C", 3)); Assert.assertEquals(expected, pairs); }
9 ããªããã£ãMapã¸ã®updateValues
ã¡ã½ããã®è¿½å
ããªããã£ãMapã«å¯¾ãã¦å
¨ã¦ã®valueãæ´æ°ãããå ´åã updateValues
ã使ããã¨ãã§ãã¾ãã
@Test public void updateValues() { MutableIntIntMap map = IntIntMaps.mutable.empty() .withKeyValue(1, 5) .withKeyValue(2, 3) .withKeyValue(3, 10); map.updateValues((k, v) -> v + 1); MutableIntIntMap expected = IntIntMaps.mutable.empty() .withKeyValue(1, 6) .withKeyValue(2, 4) .withKeyValue(3, 11); Assert.assertEquals(expected, map); }
10 MutableMultimap.getIfAbsentPutAll
ã®å®è£
MutableMultimap.getIfAbsentPutAll
ã¯ãMutableMap.getIfAbsentPut
ã¨åæ§ã®æ©è½ãæã¡ã¾ããéãã¨ãã¦ã¯ãMutableMultimap.getIfAbsentPutAll
ã§ã¯è¤æ°ã®valueãã³ã¬ã¯ã·ã§ã³ã¨ãã¦putãããã¨ãã§ããç¹ã«ããã¾ãã
@Test public void getIfAbsentPutAll() { MutableListMultimap<Integer, Integer> multimap = Multimaps.mutable.list.with(2, 1); ImmutableList<Integer> defaultValue = Lists.immutable.with(1, 2, 3); MutableList<Integer> oneValue = multimap.getIfAbsentPutAll(1, defaultValue); MutableList<Integer> twoValue = multimap.getIfAbsentPutAll(2, defaultValue); Assert.assertEquals(defaultValue, oneValue); Assert.assertEquals(Lists.mutable.with(1), twoValue); }
ã¾ã ã¾ã ããã¾ã
Eclipse Collections 10.0ã«ã¯ã¾ã 16åã®æ©è½ãæ®ã£ã¦ãã¾ããããããè¨äºã¨ãã¦å ¬éãã¦ããã¾ãã®ã§ã楽ãã¿ã«ã
Eclipse Collections 10.0ã®æ°æ©è½ã楽ããã§ããã ããã¨å¹¸ãã§ãï¼ï¼
Eclipse Collectionsã¯ã³ã³ããªãã¥ã¼ã·ã§ã³ãåãä»ãã¦ãã¾ãï¼ã©ãããå§ãã¦ãããããããããªãã¨ããæ¹ã¯itohiro73ã¾ã§DMããã ããã°åãã§ã¬ã¤ãããã¦ããã ãã¾ãã
ããã©ã¤ãã©ãªãæ°ã«å ¥ã£ã¦ããã ãã¦ãããããã«ç¥ããããã¨ããæ¹ã¯ãTwitterã§ããã·ã¥ã¿ã°#EclipseCollectionsãã¤ãã¦ã¤ã¶ããã¦ããã ãããããããã¯GitHubã¬ãã«ã¹ã¿ã¼ãã¤ãã¦ããã ããã¨ãã£ã¡ããããã³ã¾ãã®ã§ã©ãããããããé¡ããã¾ãï¼ï¼