Skip to content

Commit ce5db48

Browse files
committed
Merge pull request functionaljava#99 from mperry/list-integration
Better integration with the basic java types
2 parents 01aef1b + 462338c commit ce5db48

File tree

5 files changed

+73
-8
lines changed

5 files changed

+73
-8
lines changed

core/src/main/java/fj/data/Java.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1445,13 +1445,22 @@ public static <A> F<ArrayList<A>, List<A>> ArrayList_List() {
14451445

14461446
/**
14471447
* A function that converts Java lists to lists.
1448+
* @deprecated As of 4.3, use {@link #JavaList_List}
14481449
*
14491450
* @return A function that converts Java lists to lists.
14501451
*/
14511452
public static <A> F<java.util.List<A>, List<A>> JUList_List() {
1452-
return as -> Collection_List(as);
1453+
return as -> JavaList_List(as);
1454+
}
1455+
1456+
public static <A> F<java.util.List<A>, List<A>> JavaList_List() {
1457+
return as -> JavaList_List(as);
14531458
}
1454-
1459+
1460+
public static <A> List<A> JavaList_List(java.util.List<A> list) {
1461+
return List.list(list);
1462+
}
1463+
14551464
// BEGIN BitSet ->
14561465

14571466
/**

core/src/main/java/fj/data/List.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1331,6 +1331,10 @@ public final A minimum(final Ord<A> o) {
13311331
return foldLeft1(o.min);
13321332
}
13331333

1334+
public final java.util.List<A> toJavaList() {
1335+
return new java.util.LinkedList<A>(toCollection());
1336+
}
1337+
13341338
/**
13351339
* Projects an immutable collection of this list.
13361340
*
@@ -1412,6 +1416,15 @@ public static <A> List<A> list(final A... as) {
14121416
return Array.array(as).toList();
14131417
}
14141418

1419+
1420+
public static <A> List<A> list(final Iterable<A> i) {
1421+
return iterableList(i);
1422+
}
1423+
1424+
public static <A> List<A> list(final Iterator<A> it) {
1425+
return iterableList(() -> it);
1426+
}
1427+
14151428
/**
14161429
* Returns an empty list.
14171430
*

core/src/main/java/fj/data/Stream.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -714,6 +714,16 @@ public static <A> Stream<A> stream(final A... as) {
714714
: some(P.p(as[i], P.p(as, i + 1)))), P.p(as, 0));
715715
}
716716

717+
718+
public static <A> Stream<A> stream(Iterable<A> it) {
719+
return iterableStream(it);
720+
}
721+
722+
public static <A> Stream<A> stream(Iterator<A> it) {
723+
return iteratorStream(it);
724+
}
725+
726+
717727
/**
718728
* Returns a stream that is either infinite or bounded up to the maximum value of the given iterator starting at the
719729
* given value and stepping at increments of <code>1</code>.

core/src/test/java/fj/data/ListTest.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
package fj.data;
22

3-
import org.junit.Assert;
43
import org.junit.Test;
54

5+
import java.util.Arrays;
6+
67
import static org.junit.Assert.assertFalse;
78
import static org.junit.Assert.assertTrue;
89

@@ -30,4 +31,12 @@ public void objectMethods() {
3031

3132
}
3233

34+
@Test
35+
public void integration() {
36+
java.util.List<Integer> ul = Arrays.asList(1, 2, 3);
37+
List<Integer> dl = List.list(ul);
38+
assertTrue(ul.equals(dl.toJavaList()));
39+
40+
}
41+
3342
}

java8/src/main/java/fj/data/Java8.java

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import fj.function.Try1;
66
import fj.function.Try2;
77

8+
import java.util.Iterator;
89
import java.util.Optional;
910
import java.util.Spliterator;
1011
import java.util.Spliterators;
@@ -95,6 +96,10 @@ static public <A, B, C, E extends Exception> F<Try2<A, B, C, E>, BiFunction<A, B
9596
return t -> (a, b) -> Try.f(t).f(a, b);
9697
}
9798

99+
public static <A> java.util.stream.Stream<A> List_JavaStream(List<A> list) {
100+
return Iterable_JavaStream(list);
101+
}
102+
98103
static public <A> Option<A> Optional_Option(final Optional<A> o) {
99104
return Java8.<A>Optional_Option().f(o);
100105
}
@@ -122,13 +127,32 @@ public static <A> F<A, Unit> Consumer_F(Consumer<A> c) {
122127
};
123128
}
124129

125-
static public <A> java.util.stream.Stream<A> Stream_JStream(fj.data.Stream<A> s) {
126-
Spliterator<A> sit = Spliterators.spliteratorUnknownSize(s.iterator(), 0);
127-
return StreamSupport.stream(sit, false);
130+
static public <A> java.util.stream.Stream<A> Stream_JavaStream(fj.data.Stream<A> s) {
131+
return Iterable_JavaStream(s);
132+
}
133+
134+
static public <A> java.util.stream.Stream<A> Iterable_JavaStream(Iterable<A> it) {
135+
return StreamSupport.stream(it.spliterator(), false);
136+
}
137+
138+
static public <A> java.util.stream.Stream<A> Iterator_JavaStream(Iterator<A> it) {
139+
return Iterable_JavaStream(() -> it);
140+
}
141+
142+
static public <A> F<fj.data.Stream<A>, java.util.stream.Stream<A>> Stream_JavaStream() {
143+
return s -> Stream_JavaStream(s);
144+
}
145+
146+
static public <A> Stream<A> JavaStream_Stream(java.util.stream.Stream<A> s) {
147+
return s.collect(Collectors.toStream());
148+
}
149+
150+
static public <A> List<A> JavaStream_List(java.util.stream.Stream<A> s) {
151+
return s.collect(Collectors.toList());
128152
}
129153

130-
static public <A> F<fj.data.Stream<A>, java.util.stream.Stream<A>> Stream_JStream() {
131-
return s -> Stream_JStream(s);
154+
static public <A> Array<A> JavaStream_Array(java.util.stream.Stream<A> s) {
155+
return s.collect(Collectors.toArray());
132156
}
133157

134158
}

0 commit comments

Comments
 (0)