package
com.jayjaylab.test.testjava.java8;
import
java.util.ArrayList;
import
java.util.List;
import
java.util.function.*;
/**
* Created by jjkim on 2016. 5. 5..
*/
public
class
TestPrimitiveFunction {
public
String addPrefix(
double
number) {
return
"double number : "
+ number;
}
public
<T>
void
addItemToList(List<T> list,
double
item) {
list.add((T)String.valueOf(item));
}
public
<T>
void
addItemToList(List<T> list,
int
item) {
list.add((T)String.valueOf(item));
}
public
<T>
void
addItemToList(List<T> list,
long
item) {
list.add((T)String.valueOf(item));
}
public
double
sumToDouble(String a, String b) {
return
Double.valueOf(a) + Double.valueOf(b);
}
public
int
sumToInt(String a, String b) {
return
Integer.valueOf(a) + Integer.valueOf(b);
}
public
long
sumToLong(String a, String b) {
return
Long.valueOf(a) + Long.valueOf(b);
}
public
static
void
main(String... args) {
TestPrimitiveFunction function =
new
TestPrimitiveFunction();
System.out.println(function.tryBooleanSupplier(() -> (
true
)));
System.out.println(function.tryBooleanSupplier(Thread.currentThread()::isDaemon));
System.out.println(function.tryDoubleBinaryOperator(
(l, r) -> (l + r),
10
.0d,
2
.0d
));
System.out.println(function.tryDoubleBinaryOperator(
Double::sum,
10
.0d,
2
.0d
));
System.out.println(function.<String>tryDoubleFunction(
(n) -> {
return
"double number : "
+ n;},
10
.0d
));
System.out.println(function.<String>tryDoubleFunction(
function::addPrefix,
10
.0d
));
System.out.println(function.tryDoubleToIntFunction(
(n) -> {
return
Double.hashCode(n);},
10
.0d
));
System.out.println(function.tryDoubleToIntFunction(
Double::hashCode,
10
.0d
));
List<String> list =
new
ArrayList<>(
10
);
function.<List<String>>tryObjDoubleConsumer(
(l, n) -> {l.add(String.valueOf(n));}, list,
10
.0d
);
function.tryObjDoubleConsumer(
function::<String>addItemToList, list,
10
.0d
);
function.<List>tryObjIntConsumer(
(l, n) -> {l.add(String.valueOf(n));}, list,
1
);
function.<List>tryObjIntConsumer(
function::<String>addItemToList, list,
1
);
function.<List>tryObjLongConsumer(
(l, n) -> {l.add(String.valueOf(n));}, list, 2L
);
function.<List>tryObjLongConsumer(
function::<String>addItemToList, list, 2L
);
System.out.println(
"list : "
+ list);
System.out.println(function.<String, String>tryToDoubleBiFunction(
(a, b) -> (Double.valueOf(a) + Double.valueOf(b)),
"10.0d"
,
"11.0d"
));
System.out.println(function.<String, String>tryToDoubleBiFunction(
function::sumToDouble,
"10.0d"
,
"11.0d"
));
System.out.println(function.<String>tryToDoubleFunction(
(s) -> (Double.valueOf(s)),
"10.0d"
));
System.out.println(function.<String>tryToDoubleFunction(
Double::valueOf,
"10.0d"
));
System.out.println(function.<String, String>tryToIntBiFunction(
(a, b) -> (Integer.valueOf(a) + Integer.valueOf(b)),
"10"
,
"10"
));
System.out.println(function.<String, String>tryToIntBiFunction(
function::sumToInt,
"10"
,
"10"
));
System.out.println(function.<String>tryToIntFunction(
(a) -> (Integer.valueOf(a)),
"10"
));
System.out.println(function.<String>tryToIntFunction(
Integer::valueOf,
"10"
));
System.out.println(function.<String, String>tryToLongBiFunction(
(a, b) -> (Long.valueOf(a) + Long.valueOf(b)),
"10"
,
"20"
));
System.out.println(function.<String, String>tryToLongBiFunction(
function::sumToLong,
"10"
,
"20"
));
System.out.println(function.<String>tryToLongFunction(
(a) -> (Long.valueOf(a)),
"100"
));
System.out.println(function.<String>tryToLongFunction(
Long::valueOf,
"100"
));
}
public
boolean
tryBooleanSupplier(BooleanSupplier supplier) {
return
supplier.getAsBoolean();
}
public
double
tryDoubleBinaryOperator(DoubleBinaryOperator operator,
double
left,
double
right) {
return
operator.applyAsDouble(left, right);
}
public
<R> R tryDoubleFunction(DoubleFunction<R> function,
double
a) {
return
function.apply(a);
}
public
int
tryDoubleToIntFunction(DoubleToIntFunction function,
double
a) {
return
(
int
)(a %
100
);
}
public
<T>
void
tryObjDoubleConsumer(ObjDoubleConsumer<T> consumer, T t,
double
number) {
consumer.accept(t, number);
}
public
<T>
void
tryObjIntConsumer(ObjIntConsumer<T> consumer, T t,
int
number) {
consumer.accept(t, number);
}
public
<T>
void
tryObjLongConsumer(ObjLongConsumer<T> consumer, T t,
long
number) {
consumer.accept(t, number);
}
public
<T, U>
double
tryToDoubleBiFunction(ToDoubleBiFunction<T, U> function,
T t, U u) {
return
function.applyAsDouble(t, u);
}
public
<T>
double
tryToDoubleFunction(ToDoubleFunction<T> function, T t) {
return
function.applyAsDouble(t);
}
public
<T, U>
int
tryToIntBiFunction(ToIntBiFunction<T, U> function, T t, U u) {
return
function.applyAsInt(t, u);
}
public
<T>
int
tryToIntFunction(ToIntFunction<T> function, T t) {
return
function.applyAsInt(t);
}
public
<T, U>
long
tryToLongBiFunction(ToLongBiFunction<T, U> function, T t, U u) {
return
function.applyAsLong(t, u);
}
public
<T>
long
tryToLongFunction(ToLongFunction<T> function, T t) {
return
function.applyAsLong(t);
}
}