Projects >> funk >>34f8a63f4e755f5896e52b98e0a389a9b2a9549d

Chunk
Conflicting content
package org.javafunk.funk;

import org.javafunk.funk.datastructures.tuples.Pair;
<<<<<<< HEAD
=======
import org.javafunk.funk.datastructures.tuples.Quadruple;
>>>>>>> acf0a37d8b96d915291331fcb6fd9ccbbc8a7b0c
import org.javafunk.funk.datastructures.tuples.Triple;
import org.javafunk.funk.functors.*;
import org.javafunk.funk.iterators.*;
Solution content
package org.javafunk.funk;

import org.javafunk.funk.datastructures.tuples.Pair;
import org.javafunk.funk.datastructures.tuples.Quadruple;
import org.javafunk.funk.datastructures.tuples.Triple;
import org.javafunk.funk.functors.*;
import org.javafunk.funk.iterators.*;
File
Lazy.java
Developer's decision
Version 2
Kind of conflict
Import
Chunk
Conflicting content
import org.javafunk.funk.predicates.NotPredicate;

import java.util.Iterator;
<<<<<<< HEAD
import java.util.NoSuchElementException;

import static org.javafunk.funk.Eager.first;
=======
import java.util.List;

import static org.javafunk.funk.Eager.first;
import static org.javafunk.funk.Eager.second;
>>>>>>> acf0a37d8b96d915291331fcb6fd9ccbbc8a7b0c
import static org.javafunk.funk.Iterables.concat;
import static org.javafunk.funk.Literals.*;
import static org.javafunk.funk.Sequences.increasing;
Solution content
import org.javafunk.funk.predicates.NotPredicate;

import java.util.Iterator;
import java.util.List;
import java.util.NoSuchElementException;

import static org.javafunk.funk.Eager.first;
import static org.javafunk.funk.Eager.second;
import static org.javafunk.funk.Iterables.concat;
import static org.javafunk.funk.Literals.*;
import static org.javafunk.funk.Sequences.increasing;
File
Lazy.java
Developer's decision
Combination
Kind of conflict
Import
Chunk
Conflicting content
        }));
    }

<<<<<<< HEAD
    public static  Iterable> zip(final Iterable firstIterable, final Iterable secondIterable) {
        return new Iterable>(){
            public Iterator> iterator() {
                return new TwoZippedIterator(firstIterable.iterator(), secondIterable.iterator());
            }
        };
    }

    public static  Iterable> zip(Iterable firstIterable, Iterable secondIterable, Iterable thirdIterable) {
        return map(zip(listWith(firstIterable, secondIterable, thirdIterable)), Lazy.toTriple());
    }

    @SuppressWarnings("unchecked")
    private static  Mapper, Triple> toTriple() {
        return new Mapper, Triple>() {
            @Override public Triple map(Iterable iterable) {
                return tuple((R)first(iterable), (S)first(rest(iterable)), (T)first(rest(rest(iterable))));
            }
        };
    }

    public static Iterable> zip(final Iterable> iterables) {
        return new Iterable>() {
            public Iterator> iterator() {
                final Iterable> iterators = Eager.map(iterables, toIterators());
                return new Iterator>() {
                    public boolean hasNext() {
                        return Eager.all(iterators, new Predicate>(){
                            public boolean evaluate(Iterator iterator) {
                                return iterator.hasNext();
                            }
                        });
                    }

                    public Iterable next() {
                        if (hasNext()) {
                            return Eager.map(iterators, new Mapper, Object>() {
                                public Object map(Iterator iterator) {
                                    return iterator.next();
                                }
                            });
                        } else {
                            throw new NoSuchElementException();
                        }
                    }

                    public void remove() {
                        throw new UnsupportedOperationException();
                    }
                };
            }
        };


    }

    private static  Mapper, Iterator> toIterators() {
        return new Mapper, Iterator>() {
            @Override public Iterator map(Iterable iterable) {
                return iterable.iterator();
=======
    public static  Iterable> cartesianProduct(
            Iterable first, Iterable second, Iterable third) {
        return map(cartesianProduct(listWith(first, second, third)), Mappers.toTriple());
    }

    public static  Iterable> cartesianProduct(
            Iterable first, Iterable second, Iterable third, Iterable fourth) {
        return map(cartesianProduct(listWith(first, second, third, fourth)), Mappers.toQuadruple());
    }

    private static Iterable> cartesianProduct(final Iterable> iterables) {
        return cartesianProduct(listFrom(iterables));
    }

    private static Iterable> cartesianProduct(final List> iterables) {
        if(iterables.size() == 2) {
            return cartesianProduct(first(iterables), second(iterables));
        }

        @SuppressWarnings("unchecked")
        Iterable>> pairs = cartesianProduct(
                (Iterable) first(iterables), (Iterable>) cartesianProduct(rest(iterables)));

        return map(pairs, new Mapper>, Iterable>() {
            @Override
            public Iterable map(Pair> input) {
                return listWith(input.first()).and(input.second());
            }
        });
    }
    
    public static  Iterable> zip(final Iterable firstIterable, final Iterable secondIterable) {
        return new Iterable>(){
            public Iterator> iterator() {
                return new ZippedIterator(firstIterable.iterator(), secondIterable.iterator());
>>>>>>> acf0a37d8b96d915291331fcb6fd9ccbbc8a7b0c
            }
        };
    }
Solution content
        }));
    }

    public static  Iterable> zip(final Iterable firstIterable, final Iterable secondIterable) {
        return new Iterable>(){
            public Iterator> iterator() {
                return new TwoZippedIterator(firstIterable.iterator(), secondIterable.iterator());
            }
        };
    }

    public static  Iterable> zip(Iterable firstIterable, Iterable secondIterable, Iterable thirdIterable) {
        return map(zip(listWith(firstIterable, secondIterable, thirdIterable)), Lazy.toTriple());
    }

    @SuppressWarnings("unchecked")
    private static  Mapper, Triple> toTriple() {
        return new Mapper, Triple>() {
            @Override public Triple map(Iterable iterable) {
                return tuple((R) first(iterable), (S) first(rest(iterable)), (T) first(rest(rest(iterable))));
            }
        };
    }

    public static Iterable> zip(final Iterable> iterables) {
        return new Iterable>() {
            public Iterator> iterator() {
                final Iterable> iterators = Eager.map(iterables, toIterators());
                return new Iterator>() {
                    public boolean hasNext() {
                        return Eager.all(iterators, new Predicate>(){
                            public boolean evaluate(Iterator iterator) {
                                return iterator.hasNext();
                            }
                        });
                    }

                    public Iterable next() {
                        if (hasNext()) {
                            return Eager.map(iterators, new Mapper, Object>() {
                                public Object map(Iterator iterator) {
                                    return iterator.next();
                                }
                            });
                        } else {
                            throw new NoSuchElementException();
                        }
                    }

                    public void remove() {
                        throw new UnsupportedOperationException();
                    }
                };
            }
        };


    }

    private static  Mapper, Iterator> toIterators() {
        return new Mapper, Iterator>() {
            @Override public Iterator map(Iterable iterable) {
                return iterable.iterator();
            }
        };
    }

    public static  Iterable> cartesianProduct(
            Iterable first, Iterable second, Iterable third) {
        return map(cartesianProduct(listWith(first, second, third)), Mappers.toTriple());
    }

    public static  Iterable> cartesianProduct(
            Iterable first, Iterable second, Iterable third, Iterable fourth) {
        return map(cartesianProduct(listWith(first, second, third, fourth)), Mappers.toQuadruple());
    }

    private static Iterable> cartesianProduct(final Iterable> iterables) {
        return cartesianProduct(listFrom(iterables));
    }

    private static Iterable> cartesianProduct(final List> iterables) {
        if(iterables.size() == 2) {
            return cartesianProduct(first(iterables), second(iterables));
        }

        @SuppressWarnings("unchecked")
        Iterable>> pairs = cartesianProduct(
                (Iterable) first(iterables), (Iterable>) cartesianProduct(rest(iterables)));

        return map(pairs, new Mapper>, Iterable>() {
            @Override
            public Iterable map(Pair> input) {
                return listWith(input.first()).and(input.second());
            }
        });
    }

    public static  Iterable rest(final Iterable iterable) {
        return slice(iterable, 1, null, 1);
    }

    private static class EachIterator implements Iterator {
        private Iterator iterator;
        private Action action;

        private EachIterator(Iterator iterator, Action action) {
            this.iterator = iterator;
            this.action = action;
        }

        @Override
        public boolean hasNext() {
            return iterator.hasNext();
        }

        @Override
        public T next() {
            T next = iterator.next();
            action.on(next);
            return next;
        }

        @Override
        public void remove() {
            throw new UnsupportedOperationException();
        }
    }
}
File
Lazy.java
Developer's decision
Manual
Kind of conflict
Annotation
Method declaration
Method invocation
Method signature
Return statement