Løsningsforslag - oppgaver i Avsnitt 1.9.4


Oppgave 1

  Function<String,Integer> f = String::length;

Oppgave 2

  Function<String,Character> g = s -> Character.valueOf(s.charAt(0));

Oppgave 3

a) Det blir ingen syntaksfeil med String::concat. Men det blir ikke noe mellomrom mellom de to strengene.

 b) BiFunction<String,String,String> sum = (x,y) -> x + " " + y;

 c) BiFunction<String,String,String> sum = (x,y) -> String.join(" ",x,y);

Oppgave 4

  BiFunction<String,String,Person> person = Person::new;
  Function<Person,String> navn = Person::toString;
  BiFunction<String,String,String> personnavn = person.andThen(navn);

  System.out.println(personnavn.apply("Per", "Olsen"));
  // Utskrift: Per Olsen

Kan også lages litt kortere:

  BiFunction<String,String,Person> person = Person::new;
  BiFunction<String,String,String> personnavn = person.andThen(Person::toString);

Oppgave 5

 String[] navn = {"Per","Kari","Arne","Petter","Margrethe","Jasmin"};
 System.out.println(Arrays.toString(navn));  // gammelt innhold

 Arrays.setAll(navn, i -> navn[i].toUpperCase());   // gjør om
 System.out.println(Arrays.toString(navn));  // nytt innhold

Oppgave 6

  String[] navn = {"Per","Kari","Arne","Petter","Margrethe","Jasmin"};
  Boolean[] b = new Boolean[navn.length];
  Arrays.setAll(b, i -> navn[i].indexOf('A') != -1 || navn[i].indexOf('a') != -1);
  System.out.println(Arrays.toString(b));
  // Utskrift: [false, true, true, false, true, true]

Alternativ måte:

  Arrays.setAll(b, i -> navn[i].toUpperCase().indexOf('A') != -1);

Oppgave 7

Her er det satt opp noe aktuelle tegn/bokstaver:

  Character[] c = {'Å','Œ','Ç','Ñ','É','$','£','','¥','Ð','_','#','%','&'};
  Boolean[] b = new Boolean[c.length];
  Arrays.setAll(b, i -> Character.isJavaIdentifierStart(c[i]));
  System.out.println(Arrays.toString(b));

  // Sjekk utskriften - stemmer det med det du trodde?

Oppgave 8

  double[] a = new double[10];
  Arrays.setAll(a, i -> 1 + i/10.0);
  System.out.println(Arrays.toString(a));
  // Utskrift: [1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9]

Oppgave 9

Alle oppgavene starter med:

  int[] a = new int[10];
  a)  Arrays.setAll(a, i -> i);

 eller:  Arrays.setAll(a, IntUnaryOperator.identity());

  b)  Arrays.setAll(a, i -> a.length - i);

  c)  Arrays.setAll(a, i -> 2*i + 1);

  d)  Arrays.setAll(a, i -> (i + 1)*(i + 1));

  e)  Arrays.setAll(a, i -> i < 2 ? i : a[i-1] + a[i-2]);

  f)  Arrays.setAll(a, i -> (i & 1) == 0 ? 0 : 1);

  g)  Arrays.setAll(a, i -> (i & 1) == 0 ? i + 1 : -(i + 1));
  

Oppgave 10

  String[] tall = {"10","12","9","13","5","20","17","3","11","10"};
  int[] a = new int[tall.length];
  Arrays.setAll(a, i -> Integer.parseInt(tall[i]));