Skip to content
Snippets Groups Projects
A_LambdasAndMethodReferences.java 6.71 KiB
Newer Older
package exercises;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import java.util.function.BiFunction;
import java.util.function.Consumer;
import java.util.function.DoublePredicate;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;
import org.junit.Ignore;
import org.junit.Test;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

/**
 * This set of exercises is about lambdas and method references.
 * You will write a lambda or method reference corresponding to
 * each of several different functional interfaces. Each exercise
 * is named after the functional interface intended to be used
 * as the solution.
 */
public class A_LambdasAndMethodReferences {
    @Test @Ignore
    public void a01predicate() {
        // TODO: write a lambda expression that is a predicate
        // that tests whether a string is longer than four characters.
        Predicate<String> pred = null;

        assertTrue(pred.test("abcde"));
        assertFalse(pred.test("abcd"));
    }

    @Test @Ignore
    public void a02predicate() {
        // TODO: write a lambda expression that is a predicate
        // that tests whether a string is empty
        Predicate<String> pred = null;

        assertTrue(pred.test(""));
        assertFalse(pred.test("a"));
    }

    @Test @Ignore
    public void a03predicate() {
        // TODO: write a method reference that is a predicate
        // that tests whether a string is empty
        Predicate<String> pred = null;

        assertTrue(pred.test(""));
        assertFalse(pred.test("a"));
    }

    @Test @Ignore
    public void a04function() {
        // TODO: write a lambda expression that wraps the given
        // string in parentheses.
        Function<String, String> func = null;
        
        assertEquals("(abc)", func.apply("abc"));
    }

    @Test @Ignore
    public void a05function() {
        // TODO: write a lambda expression that converts the
        // given string to upper case.
        Function<String, String> func = null;

        assertEquals("ABC", func.apply("abc"));
    }

    @Test @Ignore
    public void a06function() {
        // TODO: write a method reference that converts the
        // given string to upper case.
        Function<String, String> func = null;

        assertEquals("ABC", func.apply("abc"));
    }

    @Test @Ignore
    public void a07consumer() {
        // TODO: write a lambda expression that appends the
        // string "abc" to the given StringBuilder.
        Consumer<StringBuilder> cons = null;

        StringBuilder sb = new StringBuilder("xyz");
        cons.accept(sb);
        assertEquals("xyzabc", sb.toString());
    }

    @Test @Ignore
    public void a08consumer() {
        // TODO: write a lambda expression that clears the given list.
        Consumer<List<String>> cons = null;

        List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));
        cons.accept(list);
        assertTrue(list.isEmpty());
    }

    @Test @Ignore
    public void a09consumer() {
        // TODO: write a method reference that clears the given list.
        Consumer<List<String>> cons = null;

        List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));
        cons.accept(list);
        assertTrue(list.isEmpty());
    }

    @Test @Ignore
    public void a10supplier() {
        // TODO: write a lambda expression that returns a new StringBuilder
        // containing the string "abc".
        Supplier<StringBuilder> sup = () -> new StringBuilder("abc");

        assertEquals("abc", sup.get().toString());
    }

    @Test @Ignore
    public void a11supplier() {
        // TODO: write a lambda expression that returns a new, empty StringBuilder
        Supplier<StringBuilder> sup = null;

        assertEquals("", sup.get().toString());
    }

    @Test @Ignore
    public void a12supplier() {
        // TODO: write a method reference that returns a new, empty StringBuilder
        Supplier<StringBuilder> sup = null;

        assertEquals("", sup.get().toString());
    }

    @Test @Ignore
    public void a13doublepredicate() {
        // TODO: write a lambda expression that tests whether a double value
        // is greater than 10.0.
        DoublePredicate pred = d -> d > 10.0;

        assertTrue(pred.test(15.0));
        assertFalse(pred.test(5.0));
    }

    @Test @Ignore
    public void a14doublepredicate() {
        // TODO: write a lambda expression that tests whether a double value
        // is finite.
        DoublePredicate pred = d -> Double.isFinite(d);

        assertTrue(pred.test(0.0));
        assertFalse(pred.test(Double.POSITIVE_INFINITY));
    }

    @Test @Ignore
    public void a15doublepredicate() {
        // TODO: write a method reference that tests whether a double value
        // is finite.
        DoublePredicate pred = Double::isFinite;

        assertTrue(pred.test(0.0));
        assertFalse(pred.test(Double.POSITIVE_INFINITY));
    }

    @Test @Ignore
    public void a16bifunction() {
        // TODO: write a lambda expression, given two strings, returns the result
        // of concatenating the first, followed by the second, followed by the
        // first again.
        BiFunction<String, String, String> bifunc = (s1, s2) -> s1 + s2 + s1;

        assertEquals("abcdefabc", bifunc.apply("abc", "def"));
    }

    @Test @Ignore
    public void a17bifunction() {
        // TODO: write a lambda expression that returns the index of
        // the first occurrence the second string within the first string,
        // or -1 if the second string doesn't occur within the first string.
        BiFunction<String, String, Integer> bifunc = (s1, s2) -> s1.indexOf(s2);

        assertTrue(bifunc.apply("abcdefghi", "def") == 3);
        assertTrue(bifunc.apply("abcdefghi", "xyz") == -1);
    }

    @Test @Ignore
    public void a18bifunction() {
        // TODO: write a method reference that returns the index of
        // the first occurrence the second string within the first string,
        // or -1 if the second string doesn't occur within the first string.
        BiFunction<String, String, Integer> bifunc = String::indexOf;

        assertTrue(bifunc.apply("abcdefghi", "def") == 3);
        assertTrue(bifunc.apply("abcdefghi", "xyz") == -1);
    }

    @Test @Ignore
    public void a19runnable() {
        StringBuilder sb = new StringBuilder("abc");
        String suffix = "xyz";

        // TODO: write a lambda expression that appends the 'suffix'
        // variable (a String) to the sb variable (a StringBuilder).
        Runnable r = () -> sb.append(suffix);

        r.run();
        r.run();
        r.run();
        assertEquals("abcxyzxyzxyz", sb.toString());
    }
}