{"action":"created","comment":{"url":"https://api.github.com/repos/javaslang/javaslang/pulls/comments/62407120","id":62407120,"diff_hunk":"@@ -0,0 +1,398 @@\n+/*     / \\____  _    _  ____   ______  / \\ ____  __    _______\n+ *    /  /    \\/ \\  / \\/    \\ /  /\\__\\/  //    \\/  \\  //  /\\__\\   JΛVΛSLΛNG\n+ *  _/  /  /\\  \\  \\/  /  /\\  \\\\__\\\\  \\  //  /\\  \\ /\\\\/ \\ /__\\ \\   Copyright 2014-2016 Javaslang, http://javaslang.io\n+ * /___/\\_/  \\_/\\____/\\_/  \\_/\\__\\/__/\\__\\_/  \\_//  \\__/\\_____/   Licensed under the Apache License, Version 2.0\n+ */\n+package javaslang.benchmark.collection;\n+\n+import javaslang.Tuple;\n+import javaslang.Tuple2;\n+import javaslang.benchmark.BenchmarkPerformanceReporter;\n+import javaslang.collection.Array;\n+import javaslang.collection.List;\n+import javaslang.collection.SortedMap;\n+import javaslang.collection.Stack;\n+import javaslang.collection.TreeMap;\n+import org.junit.Test;\n+import org.openjdk.jmh.annotations.Benchmark;\n+import org.openjdk.jmh.annotations.BenchmarkMode;\n+import org.openjdk.jmh.annotations.Fork;\n+import org.openjdk.jmh.annotations.Group;\n+import org.openjdk.jmh.annotations.Level;\n+import org.openjdk.jmh.annotations.Measurement;\n+import org.openjdk.jmh.annotations.Mode;\n+import org.openjdk.jmh.annotations.OutputTimeUnit;\n+import org.openjdk.jmh.annotations.Param;\n+import org.openjdk.jmh.annotations.Scope;\n+import org.openjdk.jmh.annotations.Setup;\n+import org.openjdk.jmh.annotations.State;\n+import org.openjdk.jmh.annotations.TearDown;\n+import org.openjdk.jmh.annotations.Threads;\n+import org.openjdk.jmh.annotations.Warmup;\n+import org.openjdk.jmh.results.RunResult;\n+import org.openjdk.jmh.runner.Runner;\n+import org.openjdk.jmh.runner.options.Options;\n+import org.openjdk.jmh.runner.options.OptionsBuilder;\n+import scala.collection.Iterator;\n+import scala.math.Ordering;\n+import scala.math.Ordering$;\n+\n+import java.util.Collection;\n+import java.util.Collections;\n+import java.util.Map;\n+import java.util.NavigableMap;\n+import java.util.Random;\n+import java.util.concurrent.TimeUnit;\n+\n+@BenchmarkMode(Mode.Throughput)\n+@Warmup(iterations = 2, time = 1, timeUnit = TimeUnit.SECONDS)\n+@Measurement(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)\n+@OutputTimeUnit(TimeUnit.SECONDS)\n+@Fork(value = 1, jvmArgsAppend = { \"-XX:+UseG1GC\", \"-Xss500m\", \"-Xms4g\", \"-Xmx4g\", \"-ea\" })\n+@Threads(1)\n+public class TreeMapBenchmark {\n+    private static final Ordering<Integer> SCALA_ORDERING = Ordering$.MODULE$.comparatorToOrdering(Integer::compareTo);\n+\n+    @Test\n+    public void launchBenchmark() throws Exception {\n+        Options opt = new OptionsBuilder()\n+                .include(this.getClass().getSimpleName())\n+                .shouldFailOnError(true)\n+                .shouldDoGC(true)\n+                .build();\n+\n+        Collection<RunResult> results = new Runner(opt).run();\n+        BenchmarkPerformanceReporter reporter = BenchmarkPerformanceReporter.of(results);\n+        reporter.printDetailedPerformanceReport();\n+        reporter.printPerformanceRatiosReport();\n+    }\n+\n+    // The JMH samples are the best documentation for how to use it\n+    // http://hg.openjdk.java.net/code-tools/jmh/file/tip/jmh-samples/src/main/java/org/openjdk/jmh/samples/\n+    @State(Scope.Thread)\n+    public static class BenchmarkState {\n+        @Param({\"10\", \"1000\", \"100000\"})\n+        int numItems;\n+\n+        Random random = new Random();\n+\n+        int minKey;\n+        int maxKey;\n+\n+        Array<Integer> keysSorted;\n+        Array<Integer> keysRandom;\n+        Array<Tuple2<Integer, String>> entriesRandom;\n+\n+        TreeMap<Integer, String> slangTreeMap = TreeMap.empty();\n+        java.util.TreeMap<Integer, String> javaTreeMap = new java.util.TreeMap<>();\n+        scala.collection.immutable.TreeMap<Integer, String> scalaTreeMap = new scala.collection.immutable.TreeMap<>(SCALA_ORDERING);\n+\n+        @Setup(Level.Iteration)\n+        public void setUp() {\n+            minKey = 1;\n+            maxKey = numItems * 2;\n+\n+            // We exclude keys with odd numbers to test methods requiring missing keys, such as floor or ceiling\n+            keysSorted = Array.rangeBy(minKey, maxKey, 2);\n+            keysRandom = randomize(keysSorted);\n+            entriesRandom = keysRandom.map(i -> Tuple.of(i, Integer.toString(i)));\n+\n+            entriesRandom.forEach(e -> {\n+                slangTreeMap = slangTreeMap.put(e._1, e._2);\n+                javaTreeMap.put(e._1, e._2);\n+                scalaTreeMap = scalaTreeMap.$plus(new scala.Tuple2<>(e._1, e._2));\n+            });\n+        }\n+\n+        @TearDown\n+        public void tearDown() {\n+            keysRandom = null;\n+            keysRandom = null;\n+            entriesRandom = null;\n+            slangTreeMap = null;\n+            javaTreeMap = null;\n+            scalaTreeMap = null;\n+        }\n+\n+        // Valid keys are only even numbers\n+        int nextValidRandomKey() {\n+            return keysRandom.get(random.nextInt(numItems));\n+        }\n+\n+        int nextRandomKey() {\n+            return random.nextInt(maxKey);\n+        }\n+\n+        Array<Integer> randomize(Array<Integer> list) {\n+            java.util.List<Integer> integers = list.toJavaList();\n+            Collections.shuffle(integers);\n+            return Array.ofAll(integers);\n+        }\n+    }\n+\n+    @Benchmark\n+    @Group(\"GetAndPut\")\n+    public Object putRandomValues_Slang(BenchmarkState state) {\n+        TreeMap<Integer, String> treeMap = TreeMap.empty();\n+        for (Integer key : state.keysRandom) {\n+            treeMap = treeMap.put(key, Integer.toString(key));\n+        }\n+        return treeMap;\n+    }\n+\n+    @Benchmark\n+    @Group(\"GetAndPut\")\n+    public Object putRandomValues_Java(BenchmarkState state) {\n+        java.util.TreeMap<Integer, String> treeMap = new java.util.TreeMap<>();\n+        for (Integer key : state.keysRandom) {\n+            treeMap.put(key, Integer.toString(key));\n+        }\n+        return treeMap;\n+    }\n+\n+    @Benchmark\n+    @Group(\"GetAndPut\")\n+    public Object putRandomValues_Scala(BenchmarkState state) {\n+        scala.collection.immutable.TreeMap<Integer, String> treeMap = new scala.collection.immutable.TreeMap<>(SCALA_ORDERING);\n+        for (Integer key : state.keysRandom) {\n+            treeMap = treeMap.$plus(new scala.Tuple2<>(key, Integer.toString(key)));\n+        }\n+        return treeMap;\n+    }\n+\n+    @Benchmark\n+    @Group(\"GetAndPut\")\n+    public Object putSortedValues_Slang(BenchmarkState state) {\n+        TreeMap<Integer, String> treeMap = TreeMap.empty();\n+        for (Integer key : state.keysSorted) {\n+            treeMap = treeMap.put(key, Integer.toString(key));\n+        }\n+        return treeMap;\n+    }\n+\n+    @Benchmark\n+    @Group(\"GetAndPut\")\n+    public Object putSortedValues_Java(BenchmarkState state) {\n+        java.util.TreeMap<Integer, String> treeMap = new java.util.TreeMap<>();\n+        for (Integer key : state.keysSorted) {\n+            treeMap.put(key, Integer.toString(key));\n+        }\n+        return treeMap;\n+    }\n+\n+    @Benchmark\n+    @Group(\"GetAndPut\")\n+    public Object putSortedValues_Scala(BenchmarkState state) {\n+        scala.collection.immutable.TreeMap<Integer, String> treeMap = new scala.collection.immutable.TreeMap<>(SCALA_ORDERING);\n+        for (Integer key : state.keysSorted) {\n+            treeMap = treeMap.$plus(new scala.Tuple2<>(key, Integer.toString(key)));\n+        }\n+        return treeMap;\n+    }\n+\n+    @Benchmark\n+    @Group(\"GetAndPut\")\n+    public Object getValue_Slang(BenchmarkState state) {\n+        return state.slangTreeMap.get(state.nextValidRandomKey());\n+    }\n+\n+    @Benchmark\n+    @Group(\"GetAndPut\")\n+    public Object getValue_Java(BenchmarkState state) {\n+        return state.javaTreeMap.get(state.nextValidRandomKey());\n+    }\n+\n+    @Benchmark\n+    @Group(\"GetAndPut\")\n+    public Object getValue_Scala(BenchmarkState state) {\n+        return state.scalaTreeMap.get(state.nextValidRandomKey());\n+    }\n+\n+    @Benchmark\n+    @Group(\"Navigate\")\n+    public Object firstValue_Slang(BenchmarkState state) {\n+        return state.slangTreeMap.min();\n+    }\n+\n+    @Benchmark\n+    @Group(\"Navigate\")\n+    public Object firstValue_Java(BenchmarkState state) {\n+        return state.javaTreeMap.firstKey();\n+    }\n+\n+    @Benchmark\n+    @Group(\"Navigate\")\n+    public Object firstValue_Scala(BenchmarkState state) {\n+        return state.scalaTreeMap.firstKey();\n+    }\n+\n+    @Benchmark\n+    @Group(\"Navigate\")\n+    public Object lastValue_Slang(BenchmarkState state) {\n+        return state.slangTreeMap.max();\n+    }\n+\n+    @Benchmark\n+    @Group(\"Navigate\")\n+    public Object lastValue_Java(BenchmarkState state) {\n+        return state.javaTreeMap.lastKey();\n+    }\n+\n+    @Benchmark\n+    @Group(\"Navigate\")\n+    public Object lastValue_Scala(BenchmarkState state) {\n+        return state.scalaTreeMap.lastKey();\n+    }\n+\n+    @Benchmark\n+    @Group(\"Navigate\")\n+    public Object floor_Slang(BenchmarkState state) {\n+        return state.slangTreeMap.floor(state.nextRandomKey());\n+    }\n+\n+    @Benchmark\n+    @Group(\"Navigate\")\n+    public Object floor_Java(BenchmarkState state) {\n+        return state.javaTreeMap.floorEntry(state.nextRandomKey());\n+    }\n+\n+    @Benchmark\n+    @Group(\"Navigate\")\n+    public Object ceiling_Slang(BenchmarkState state) {\n+        return state.slangTreeMap.ceiling(state.nextRandomKey());\n+    }\n+\n+    @Benchmark\n+    @Group(\"Navigate\")\n+    public Object ceiling_Java(BenchmarkState state) {\n+        return state.javaTreeMap.ceilingEntry(state.nextRandomKey());\n+    }\n+    @Benchmark\n+    @Group(\"Navigate\")\n+    public Object higher_Slang(BenchmarkState state) {\n+        return state.slangTreeMap.higher(state.nextRandomKey());\n+    }\n+\n+    @Benchmark\n+    @Group(\"Navigate\")\n+    public Object higher_Java(BenchmarkState state) {\n+        return state.javaTreeMap.higherEntry(state.nextRandomKey());\n+    }\n+\n+    @Benchmark\n+    @Group(\"Navigate\")\n+    public Object lower_Slang(BenchmarkState state) {\n+        return state.slangTreeMap.lower(state.nextRandomKey());\n+    }\n+\n+    @Benchmark\n+    @Group(\"Navigate\")\n+    public Object lower_Java(BenchmarkState state) {\n+        return state.javaTreeMap.lowerEntry(state.nextRandomKey());\n+    }\n+\n+    @Benchmark\n+    @Group(\"IterateAscending\")\n+    public Object iterateAscending_Slang(BenchmarkState state) {\n+        Stack<Integer> values = List.empty();\n+        for (Tuple2<Integer, String> entry : state.slangTreeMap) {\n+            values.push(entry._1);","path":"javaslang-benchmark/src/test/java/javaslang/benchmark/collection/TreeMapBenchmark.java","position":299,"original_position":299,"commit_id":"7ef00dfaebea21839d6fe6eaffd576fcb8a68cab","original_commit_id":"6289bf2f6c18a5a683e2c92a959bd5f03ac7b80a","user":{"login":"paplorinc","id":1841944,"avatar_url":"https://avatars.githubusercontent.com/u/1841944?v=3","gravatar_id":"","url":"https://api.github.com/users/paplorinc","html_url":"https://github.com/paplorinc","followers_url":"https://api.github.com/users/paplorinc/followers","following_url":"https://api.github.com/users/paplorinc/following{/other_user}","gists_url":"https://api.github.com/users/paplorinc/gists{/gist_id}","starred_url":"https://api.github.com/users/paplorinc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/paplorinc/subscriptions","organizations_url":"https://api.github.com/users/paplorinc/orgs","repos_url":"https://api.github.com/users/paplorinc/repos","events_url":"https://api.github.com/users/paplorinc/events{/privacy}","received_events_url":"https://api.github.com/users/paplorinc/received_events","type":"User","site_admin":false},"body":"This push seems expensive in comparison, please consider a pre-allocated `ArrayList` instead (or consuming it with a `BlackHole`)","created_at":"2016-05-07T00:29:16Z","updated_at":"2016-05-07T00:29:16Z","html_url":"https://github.com/javaslang/javaslang/pull/1317#discussion_r62407120","pull_request_url":"https://api.github.com/repos/javaslang/javaslang/pulls/1317","_links":{"self":{"href":"https://api.github.com/repos/javaslang/javaslang/pulls/comments/62407120"},"html":{"href":"https://github.com/javaslang/javaslang/pull/1317#discussion_r62407120"},"pull_request":{"href":"https://api.github.com/repos/javaslang/javaslang/pulls/1317"}}},"pull_request":{"url":"https://api.github.com/repos/javaslang/javaslang/pulls/1317","id":69072898,"html_url":"https://github.com/javaslang/javaslang/pull/1317","diff_url":"https://github.com/javaslang/javaslang/pull/1317.diff","patch_url":"https://github.com/javaslang/javaslang/pull/1317.patch","issue_url":"https://api.github.com/repos/javaslang/javaslang/issues/1317","number":1317,"state":"open","locked":false,"title":"Added support for navigable fields in SortedMap/TreeMap","user":{"login":"eduardmanas","id":10696876,"avatar_url":"https://avatars.githubusercontent.com/u/10696876?v=3","gravatar_id":"","url":"https://api.github.com/users/eduardmanas","html_url":"https://github.com/eduardmanas","followers_url":"https://api.github.com/users/eduardmanas/followers","following_url":"https://api.github.com/users/eduardmanas/following{/other_user}","gists_url":"https://api.github.com/users/eduardmanas/gists{/gist_id}","starred_url":"https://api.github.com/users/eduardmanas/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eduardmanas/subscriptions","organizations_url":"https://api.github.com/users/eduardmanas/orgs","repos_url":"https://api.github.com/users/eduardmanas/repos","events_url":"https://api.github.com/users/eduardmanas/events{/privacy}","received_events_url":"https://api.github.com/users/eduardmanas/received_events","type":"User","site_admin":false},"body":"1) Added support for navigable fields in `SortedMap`/`TreeMap`- Added `descendingIterator()`/`descendingKeySet()` methods\r\n- Added `descendingMap()` method to create a map with reversed order\r\n- Added `subMap()`/`headMap()`/`tailMap()` methods to create a subMap view of this map\r\n- Added `floor`/`ceiling`/`higher`/`lower` methods to navigate the sorted map\r\n\r\n2) Refactored `RedBlackTree` to:\r\n- support ascending/descending sub-trees\r\n- support descending iterator\r\n- Changed hierarchy structure:\r\n```\r\n    RedBlackTree  <----- Node  <--- ValueNode\r\n\t               \\            \\-- Empty\r\n\t\t            \\\r\n\t                 \\-- AbstractSubTreeView  <----  AscendingSubTreeView\r\n\t\t\t\t\t                           \\---  DescendingSubTreeView\r\n\r\n```\r\n3) Added `TreeMapBenchmark`\r\n- Measure `TreeMap` and new navigable methods performance versus Java/Scala implementation\r\n- Created `BenchmarkPerformanceReporter` to show nice looking performance comparison reports.","created_at":"2016-05-05T21:23:15Z","updated_at":"2016-05-07T00:29:16Z","closed_at":null,"merged_at":null,"merge_commit_sha":"37cda2eca3011f3eb5f00098a3cc1541026d9480","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/javaslang/javaslang/pulls/1317/commits","review_comments_url":"https://api.github.com/repos/javaslang/javaslang/pulls/1317/comments","review_comment_url":"https://api.github.com/repos/javaslang/javaslang/pulls/comments{/number}","comments_url":"https://api.github.com/repos/javaslang/javaslang/issues/1317/comments","statuses_url":"https://api.github.com/repos/javaslang/javaslang/statuses/7ef00dfaebea21839d6fe6eaffd576fcb8a68cab","head":{"label":"eduardmanas:navigablemap","ref":"navigablemap","sha":"7ef00dfaebea21839d6fe6eaffd576fcb8a68cab","user":{"login":"eduardmanas","id":10696876,"avatar_url":"https://avatars.githubusercontent.com/u/10696876?v=3","gravatar_id":"","url":"https://api.github.com/users/eduardmanas","html_url":"https://github.com/eduardmanas","followers_url":"https://api.github.com/users/eduardmanas/followers","following_url":"https://api.github.com/users/eduardmanas/following{/other_user}","gists_url":"https://api.github.com/users/eduardmanas/gists{/gist_id}","starred_url":"https://api.github.com/users/eduardmanas/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eduardmanas/subscriptions","organizations_url":"https://api.github.com/users/eduardmanas/orgs","repos_url":"https://api.github.com/users/eduardmanas/repos","events_url":"https://api.github.com/users/eduardmanas/events{/privacy}","received_events_url":"https://api.github.com/users/eduardmanas/received_events","type":"User","site_admin":false},"repo":{"id":56801744,"name":"javaslang","full_name":"eduardmanas/javaslang","owner":{"login":"eduardmanas","id":10696876,"avatar_url":"https://avatars.githubusercontent.com/u/10696876?v=3","gravatar_id":"","url":"https://api.github.com/users/eduardmanas","html_url":"https://github.com/eduardmanas","followers_url":"https://api.github.com/users/eduardmanas/followers","following_url":"https://api.github.com/users/eduardmanas/following{/other_user}","gists_url":"https://api.github.com/users/eduardmanas/gists{/gist_id}","starred_url":"https://api.github.com/users/eduardmanas/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eduardmanas/subscriptions","organizations_url":"https://api.github.com/users/eduardmanas/orgs","repos_url":"https://api.github.com/users/eduardmanas/repos","events_url":"https://api.github.com/users/eduardmanas/events{/privacy}","received_events_url":"https://api.github.com/users/eduardmanas/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/eduardmanas/javaslang","description":"A functional library for Java 8+ that provides persistent data types and functional control structures.","fork":true,"url":"https://api.github.com/repos/eduardmanas/javaslang","forks_url":"https://api.github.com/repos/eduardmanas/javaslang/forks","keys_url":"https://api.github.com/repos/eduardmanas/javaslang/keys{/key_id}","collaborators_url":"https://api.github.com/repos/eduardmanas/javaslang/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/eduardmanas/javaslang/teams","hooks_url":"https://api.github.com/repos/eduardmanas/javaslang/hooks","issue_events_url":"https://api.github.com/repos/eduardmanas/javaslang/issues/events{/number}","events_url":"https://api.github.com/repos/eduardmanas/javaslang/events","assignees_url":"https://api.github.com/repos/eduardmanas/javaslang/assignees{/user}","branches_url":"https://api.github.com/repos/eduardmanas/javaslang/branches{/branch}","tags_url":"https://api.github.com/repos/eduardmanas/javaslang/tags","blobs_url":"https://api.github.com/repos/eduardmanas/javaslang/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/eduardmanas/javaslang/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/eduardmanas/javaslang/git/refs{/sha}","trees_url":"https://api.github.com/repos/eduardmanas/javaslang/git/trees{/sha}","statuses_url":"https://api.github.com/repos/eduardmanas/javaslang/statuses/{sha}","languages_url":"https://api.github.com/repos/eduardmanas/javaslang/languages","stargazers_url":"https://api.github.com/repos/eduardmanas/javaslang/stargazers","contributors_url":"https://api.github.com/repos/eduardmanas/javaslang/contributors","subscribers_url":"https://api.github.com/repos/eduardmanas/javaslang/subscribers","subscription_url":"https://api.github.com/repos/eduardmanas/javaslang/subscription","commits_url":"https://api.github.com/repos/eduardmanas/javaslang/commits{/sha}","git_commits_url":"https://api.github.com/repos/eduardmanas/javaslang/git/commits{/sha}","comments_url":"https://api.github.com/repos/eduardmanas/javaslang/comments{/number}","issue_comment_url":"https://api.github.com/repos/eduardmanas/javaslang/issues/comments{/number}","contents_url":"https://api.github.com/repos/eduardmanas/javaslang/contents/{+path}","compare_url":"https://api.github.com/repos/eduardmanas/javaslang/compare/{base}...{head}","merges_url":"https://api.github.com/repos/eduardmanas/javaslang/merges","archive_url":"https://api.github.com/repos/eduardmanas/javaslang/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/eduardmanas/javaslang/downloads","issues_url":"https://api.github.com/repos/eduardmanas/javaslang/issues{/number}","pulls_url":"https://api.github.com/repos/eduardmanas/javaslang/pulls{/number}","milestones_url":"https://api.github.com/repos/eduardmanas/javaslang/milestones{/number}","notifications_url":"https://api.github.com/repos/eduardmanas/javaslang/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/eduardmanas/javaslang/labels{/name}","releases_url":"https://api.github.com/repos/eduardmanas/javaslang/releases{/id}","deployments_url":"https://api.github.com/repos/eduardmanas/javaslang/deployments","created_at":"2016-04-21T19:53:47Z","updated_at":"2016-04-21T19:53:48Z","pushed_at":"2016-05-05T21:20:22Z","git_url":"git://github.com/eduardmanas/javaslang.git","ssh_url":"git@github.com:eduardmanas/javaslang.git","clone_url":"https://github.com/eduardmanas/javaslang.git","svn_url":"https://github.com/eduardmanas/javaslang","homepage":"http://javaslang.io","size":11002,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"javaslang:master","ref":"master","sha":"24ca0a8f1e0067e63ec6d4668e481f0f4cbc405a","user":{"login":"javaslang","id":5786132,"avatar_url":"https://avatars.githubusercontent.com/u/5786132?v=3","gravatar_id":"","url":"https://api.github.com/users/javaslang","html_url":"https://github.com/javaslang","followers_url":"https://api.github.com/users/javaslang/followers","following_url":"https://api.github.com/users/javaslang/following{/other_user}","gists_url":"https://api.github.com/users/javaslang/gists{/gist_id}","starred_url":"https://api.github.com/users/javaslang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/javaslang/subscriptions","organizations_url":"https://api.github.com/users/javaslang/orgs","repos_url":"https://api.github.com/users/javaslang/repos","events_url":"https://api.github.com/users/javaslang/events{/privacy}","received_events_url":"https://api.github.com/users/javaslang/received_events","type":"Organization","site_admin":false},"repo":{"id":16378879,"name":"javaslang","full_name":"javaslang/javaslang","owner":{"login":"javaslang","id":5786132,"avatar_url":"https://avatars.githubusercontent.com/u/5786132?v=3","gravatar_id":"","url":"https://api.github.com/users/javaslang","html_url":"https://github.com/javaslang","followers_url":"https://api.github.com/users/javaslang/followers","following_url":"https://api.github.com/users/javaslang/following{/other_user}","gists_url":"https://api.github.com/users/javaslang/gists{/gist_id}","starred_url":"https://api.github.com/users/javaslang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/javaslang/subscriptions","organizations_url":"https://api.github.com/users/javaslang/orgs","repos_url":"https://api.github.com/users/javaslang/repos","events_url":"https://api.github.com/users/javaslang/events{/privacy}","received_events_url":"https://api.github.com/users/javaslang/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/javaslang/javaslang","description":"A functional library for Java 8+ that provides persistent data types and functional control structures.","fork":false,"url":"https://api.github.com/repos/javaslang/javaslang","forks_url":"https://api.github.com/repos/javaslang/javaslang/forks","keys_url":"https://api.github.com/repos/javaslang/javaslang/keys{/key_id}","collaborators_url":"https://api.github.com/repos/javaslang/javaslang/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/javaslang/javaslang/teams","hooks_url":"https://api.github.com/repos/javaslang/javaslang/hooks","issue_events_url":"https://api.github.com/repos/javaslang/javaslang/issues/events{/number}","events_url":"https://api.github.com/repos/javaslang/javaslang/events","assignees_url":"https://api.github.com/repos/javaslang/javaslang/assignees{/user}","branches_url":"https://api.github.com/repos/javaslang/javaslang/branches{/branch}","tags_url":"https://api.github.com/repos/javaslang/javaslang/tags","blobs_url":"https://api.github.com/repos/javaslang/javaslang/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/javaslang/javaslang/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/javaslang/javaslang/git/refs{/sha}","trees_url":"https://api.github.com/repos/javaslang/javaslang/git/trees{/sha}","statuses_url":"https://api.github.com/repos/javaslang/javaslang/statuses/{sha}","languages_url":"https://api.github.com/repos/javaslang/javaslang/languages","stargazers_url":"https://api.github.com/repos/javaslang/javaslang/stargazers","contributors_url":"https://api.github.com/repos/javaslang/javaslang/contributors","subscribers_url":"https://api.github.com/repos/javaslang/javaslang/subscribers","subscription_url":"https://api.github.com/repos/javaslang/javaslang/subscription","commits_url":"https://api.github.com/repos/javaslang/javaslang/commits{/sha}","git_commits_url":"https://api.github.com/repos/javaslang/javaslang/git/commits{/sha}","comments_url":"https://api.github.com/repos/javaslang/javaslang/comments{/number}","issue_comment_url":"https://api.github.com/repos/javaslang/javaslang/issues/comments{/number}","contents_url":"https://api.github.com/repos/javaslang/javaslang/contents/{+path}","compare_url":"https://api.github.com/repos/javaslang/javaslang/compare/{base}...{head}","merges_url":"https://api.github.com/repos/javaslang/javaslang/merges","archive_url":"https://api.github.com/repos/javaslang/javaslang/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/javaslang/javaslang/downloads","issues_url":"https://api.github.com/repos/javaslang/javaslang/issues{/number}","pulls_url":"https://api.github.com/repos/javaslang/javaslang/pulls{/number}","milestones_url":"https://api.github.com/repos/javaslang/javaslang/milestones{/number}","notifications_url":"https://api.github.com/repos/javaslang/javaslang/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/javaslang/javaslang/labels{/name}","releases_url":"https://api.github.com/repos/javaslang/javaslang/releases{/id}","deployments_url":"https://api.github.com/repos/javaslang/javaslang/deployments","created_at":"2014-01-30T14:07:25Z","updated_at":"2016-05-06T15:32:46Z","pushed_at":"2016-05-07T00:02:50Z","git_url":"git://github.com/javaslang/javaslang.git","ssh_url":"git@github.com:javaslang/javaslang.git","clone_url":"https://github.com/javaslang/javaslang.git","svn_url":"https://github.com/javaslang/javaslang","homepage":"http://javaslang.io","size":11170,"stargazers_count":863,"watchers_count":863,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":101,"mirror_url":null,"open_issues_count":77,"forks":101,"open_issues":77,"watchers":863,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/javaslang/javaslang/pulls/1317"},"html":{"href":"https://github.com/javaslang/javaslang/pull/1317"},"issue":{"href":"https://api.github.com/repos/javaslang/javaslang/issues/1317"},"comments":{"href":"https://api.github.com/repos/javaslang/javaslang/issues/1317/comments"},"review_comments":{"href":"https://api.github.com/repos/javaslang/javaslang/pulls/1317/comments"},"review_comment":{"href":"https://api.github.com/repos/javaslang/javaslang/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/javaslang/javaslang/pulls/1317/commits"},"statuses":{"href":"https://api.github.com/repos/javaslang/javaslang/statuses/7ef00dfaebea21839d6fe6eaffd576fcb8a68cab"}}}}