Как можно извлечь числа из строки и добавить текст в середине с помощью лямбда-ява-списков? - PullRequest
0 голосов
/ 19 октября 2019

Таким образом, у меня есть задача изменить список строк (или более извлекать из него) частей, а затем добавить к нему некоторый текст в начале, в середине, а также преобразовать числа в целое число, а затем умножить его на заданную скорость. В одной части задачи мне нужно использовать лямбду и мой собственный класс, а в следующей - использовать потоки для извлечения и изменения всего этого. Я ищу больше как подсказки, чем код. Какие методы использовать и некоторые инструкции о том, как это сделать. Больше требований в коде в комментариях, я был бы очень благодарен.

import java.util.*;

public class ListCreator<S,T> {

List<T> list;

protected ListCreator(List<T> listcreate){
    this.list = listcreate; //kreator robi nowa liste zeby nie modyfikowac
}

public static <S,T> ListCreator<S,T> collectFrom(List<T> srclist){
    ListCreator<S,T> listCreator = new ListCreator<S,T>(srclist);
    listCreator.list = srclist; //tworzy liste lc z zawartoscia listy ktora chce zbadac/zmodyfikowac
    return listCreator;
}

public ListCreator<S,T> when(Selector<T> selector){
    List<T> nextlist = new ArrayList<>();
    for (int i = 0; i < list.size(); i++){
        T arg = list.get(i); //biore indeksy kazdego z elementow
        if(selector.select(arg)){ //patrze czy spelniaja warunki
           nextlist.add(arg);

        }
    }
    this.list = nextlist; /// w koncu przepisuje nextlist do tego obiektu uffff zmarnowalam na tym najwiecej czasu
    return this;
}

public <S> List<S> mapEvery(Mapper<T,S> mapper){
    List<S> dlist = new ArrayList<>();
    for (int i = 0; i < list.size(); i++){
        T arg = list.get(i); //zbieram indeksy elementow jako typu T
        S modarg = mapper.map(arg); //kazdy argument modyfikuje i przypisuje jako argument danego typu
        dlist.add(modarg); // dodaje zmodyfikowany element
    }
    return dlist;
}
}  

import java.util.*;

public class Main {

static List<String> getPricesInPLN(List<String> destinations, double xrate) {
return ListCreator.collectFrom(destinations)
                   .when(e -> e.startsWith("WAW") /*<-- lambda wyrażenie
                            *  selekcja wylotów z Warszawy (zaczynających się od WAW)
                            */
                    )
                   .mapEvery(f -> f.
                           ); /*<-- lambda that creates (multiplies by) the price using the following rate of ratePLNvsEUR and then maps all of it to the result text on console
                               */

   }

  /* main class for first task using lambdas and listcreator to extract 
 all the factors into following result on the console:
 to HAV - price in PLN: 5160
 to DPS - price in PLN: 8600
 to HKT - price in PLN: 4300
   */
rate
public static void main(String[] args) {
    // these are the destination airports 
List<String> dest = Arrays.asList(
  "bleble bleble 2000",
  "WAW HAV 1200",
  "xxx yyy 789",
  "WAW DPS 2000",
  "WAW HKT 1000"
);
double ratePLNvsEUR = 4.30;
List<String> result = getPricesInPLN(dest, ratePLNvsEUR);
for (String r : result) System.out.println(r);
 }
 }

 // main to second task where I need to do all of the previous one but in 
 // one stream without using the listcreator class

  /*<-- imports */

 public class Main {

 public static void main(String[] args) {
// Lista destynacji: port_wylotu port_przylotu cena_EUR 
List<String> dest = Arrays.asList(
  "bleble bleble 2000",
  "WAW HAV 1200",
  "xxx yyy 789",
  "WAW DPS 2000",
  "WAW HKT 1000"
);
double ratePLNvsEUR = 4.30;
List<String> result = 
/*<-- here should be a stream

for (String r : result) System.out.println(r);
}
}
...