Java - apycazo/playground GitHub Wiki

Optional test

private static void testOptional () 
{
	log.info("Testing optional values");
	
	String str = "string";
	String emptyStr = "";
	String nullStr = null;
	
	String result;
	result = Optional.ofNullable(nullStr).orElse("str is null");
	log.info("Result (nullString) = '{}'", result);
	// Logs: Result (nullString) = 'str is null'
	result = Optional.ofNullable(emptyStr).orElse("str is null");
	log.info("Result (emptyString) = '{}'", result);
	// Logs: Result (emptyString) = ''
	result = Optional.ofNullable(str).orElse("str is null");
	log.info("Result (validString) = '{}'", result);
	// Logs: Result (validString) = 'string'
	result = Optional.of(emptyStr).orElse("str is null");
	log.info("Result (emptyString, not nullable) = '{}'", result);
	// Logs: Result (emptyString, not nullable) = ''
	
}

Java 8 reference

import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;

public class J8Reference {

    static String string = "0123456789ABCDEF";

    static interface Converter {

        String convert(String string);

        default String safeConvert(String string)
        {
            return string == null ? convert("") : convert(string);
        }
    }

    static class ConverterMethods {

        String formatA(String string)
        {
            return String.format("A [%s]", string);
        }

        String formatB(String string)
        {
            return String.format("B [%s]", string);
        }
    }

    static class TestSubject {

        int intValue;
        String stringValue;
        long longValue;

        public TestSubject(int intValue, String stringValue, long longValue)
        {
            this.intValue = intValue;
            this.stringValue = stringValue;
            this.longValue = longValue;
        }

        public int getIntValue()
        {
            return intValue;
        }

        public String getStringValue()
        {
            return stringValue;
        }

        public long getLongValue()
        {
            return longValue;
        }
    }

    public static void testPredicate()
    {

        Predicate<String> p = (x) -> x.length() > 10;
        System.out.println("Predicate value is " + p.test(string));
    }

    public static void testFunction()
    {

        Function<String, Integer> sizeOf = (x) -> {
            return x == null ? 0 : x.trim().length();
        };

        System.out.println("Length of string is " + sizeOf.apply(string));
        System.out.println("Length of null string is " + sizeOf.apply(null));
    }

    public static void testConsumer()
    {

        Consumer<String> consumer = (x) -> {
            System.out.println("Value to consume is " + x);
        };

        consumer.accept(string);
    }

    public static void testDoubleColon()
    {

        ConverterMethods cm = new ConverterMethods();
        Converter cA = cm::formatA;
        Converter cB = cm::formatB;

        Consumer<String> c = (x) -> {
            System.out.println("Consuming string");
            System.out.println(cA.safeConvert(x));
            System.out.println(cB.safeConvert(x));
        };

        c.accept(string);
        c.accept(null);
    }
    
    private static List<TestSubject> generateSubjects () {
        
        List<TestSubject> list = new LinkedList<>();
        for (int i = 0; i < 4; i++) {
            TestSubject ts = new TestSubject(i, "i=" + i, i*10);
            list.add(ts);
        }
        return list;
    }

    public static void testSorter()
    {
        System.out.println("Testing list sorting");
        List<TestSubject> list = generateSubjects();
        Consumer<TestSubject> c = (x) -> {
            System.out.printf("[%d:%s:%d]%n",
                    x.intValue,
                    x.stringValue,
                    x.longValue);
        };
        
        list.stream().forEach(c);
        list.sort(
                Comparator
                        .comparing(TestSubject::getIntValue)
                        .reversed()
        );
        System.out.println("Sorted");
        list.stream().forEach(c);
    }

    public static void testArrayStream()
    {
        String[] strings = {"a", "b", "c"};
        Arrays.stream(strings).forEach((x) -> {
            System.out.println("Value is " + x);
        });
    }

    public static void testMapReduce()
    {

        // Generate a value list
        List<TestSubject> list = TestSubject.samples();
        // Find the test subject with the longest string value
        String s = list.stream()
                .map(TestSubject::getStringValue)
                .reduce("", (a, b) -> a.length() >= b.length() ? a : b);
        System.out.println("Subjects are:");
        list.stream().forEach((x) -> System.out.println(x.getStringValue()));
        System.out.println("Longest values is :" + s);
    }

    public static void testSimpleCollect()
    {
        // Generate a value list
        List<TestSubject> list = TestSubject.samples();
        List<String> strList = list.stream()
                .filter(p -> p.getIntValue() < 4)
                .map(TestSubject::getStringValue)
                .collect(Collectors.toList());

        strList.stream().forEach(p -> System.out.println("Col: " + p));

    }

    public static void testGroupByCollect()
    {
        List<TestSubject> list = TestSubject.samples();
        Map<Long, List<TestSubject>> strList = list
                .stream()
                .collect(Collectors.groupingBy(TestSubject::getLongValue));
        strList.keySet().stream().forEach(
                key -> {
                    System.out.println("K:" + key);
                    List<TestSubject> entry = strList.get(key);
                    entry.stream().forEach(v -> {
                        System.out.println("\tV:" + v.getStringValue());
                    });
                }
        );

    }

    public static void testCollectionToMap()
    {
        List<TestSubject> list = TestSubject.samples();
        
        // Alternate to Function.identity() is p -> p        
        Map<Integer, TestSubject> map = list
                .stream()
                .collect(Collectors
                        .toMap(TestSubject::getIntValue, Function.identity())
                );
        
        map.keySet().stream().forEach(
                key -> {
                    TestSubject value = map.get(key);
                    System.out.println(key + ":" + value.getStringValue());
                }
        );
    }

}
⚠️ **GitHub.com Fallback** ⚠️