[ 
https://issues.apache.org/jira/browse/TINKERPOP-1089?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15106881#comment-15106881
 ] 

Daniel Kuppitz commented on TINKERPOP-1089:
-------------------------------------------

I gave it a try and it's an easy fix for {{OrderLocalStep}}:

{code}
...

private static <A> List<A> sortCollection(final Collection<A> collection, final 
Comparator<?> comparator) {
    final List<A> list = collection instanceof List ? (List<A>) collection : 
new ArrayList<>(collection);
    if (Order.shuffle.equals(comparator)) { // special handling for 
Order.shuffle
        Collections.shuffle(list);
    } else {
        Collections.sort(list, (Comparator) comparator);
    }
    return list;
}

private static <K, V> Map<K, V> sortMap(final Map<K, V> map, final 
Comparator<?> comparator) {
    final List<Map.Entry<K, V>> entries = sortCollection(new 
ArrayList<>(map.entrySet()), comparator); // reuse existing code
    final LinkedHashMap<K, V> sortedMap = new LinkedHashMap<>();
    entries.forEach(entry -> sortedMap.put(entry.getKey(), entry.getValue()));
    return sortedMap;
}
{code}

However, {{OrderGlobalStep}} seems to be a lot more tricky as it uses 
{{ChainedComparator}}.

> Order.shuffle implementation is too fragile
> -------------------------------------------
>
>                 Key: TINKERPOP-1089
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP-1089
>             Project: TinkerPop
>          Issue Type: Bug
>          Components: process
>    Affects Versions: 3.0.2-incubating
>            Reporter: Daniel Kuppitz
>            Assignee: Marko A. Rodriguez
>             Fix For: 3.1.1-incubating
>
>
> {code}
> __((1..100).toList()).order(local).by(shuffle)
> {code}
> Try that query often enough and it will fail. You can increase the likeliness 
> of a failure by increasing the size of the list. An explanation of why that 
> happens is given here:
> http://stackoverflow.com/questions/19325256/java-lang-illegalargumentexception-comparison-method-violates-its-general-contr



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to