У меня есть следующий код, который получает список всех доменов на основе сведений о входящих странах, которые я получаю из REST API
private static List<Domain> testDataInPlain() {
List<Domain> allDomains = new ArrayList<>();
List<Country> countries = buildIncomingCountries();
List<Country> availableCountries = availableCountries();
for (Country availableCountry : availableCountries) {
if(countries.contains(availableCountry)) {
List<Domain> availableDomains = getBusinessCountryDomains(availableCountry);
if(availableDomains == null) {
return new ArrayList<>();
} else {
for (Domain availableDomain : availableDomains) {
if(availableCountry.getName().equals(availableDomain.getCountry())) {
allDomains.add(availableDomain);
}
}
}
}
}
return allDomains;
}
Я пытаюсь преобразовать приведенный выше код в лямбда-функцию Java8. Код, который я конвертировал до сих пор, показан ниже, но он неверен
private static List<?> testDataInLambda() {
List<Domain> allDomains = new ArrayList<>();
List<Country> countries = buildIncomingCountries();
List<Country> availableCountries = availableCountries();
return availableCountries.stream()
.filter(countries::contains)
.map(country -> {
List<Domain> availableDomains = getBusinessCountryDomains(country);
return availableDomains;
})
.filter(allDomains::contains)
.collect(Collectors.toList());
}
Я не могу привести полное преобразование в лямбду, так как я застрял, особенно при выводе функции лямбда для
if(availableCountry.getName().equals(availableDomain.getCountry()))
Может кто-нибудь помочь мне с этим?
Мой полный исходный код показан ниже
package com.example.demo;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class Test {
public static void main(String[] args) {
System.out.println(testDataInPlain());
System.out.println(testDataInLambda());
}
private static List<Domain> testDataInPlain() {
List<Domain> allDomains = new ArrayList<>();
List<Country> countries = buildIncomingCountries();
List<Country> availableCountries = availableCountries();
for (Country availableCountry : availableCountries) {
if(countries.contains(availableCountry)) {
List<Domain> availableDomains = getBusinessCountryDomains(availableCountry);
if(availableDomains == null) {
return new ArrayList<>();
} else {
for (Domain availableDomain : availableDomains) {
if(availableCountry.getName().equals(availableDomain.getCountry())) {
allDomains.add(availableDomain);
}
}
}
}
}
return allDomains;
}
private static List<?> testDataInLambda() {
List<Domain> allDomains = new ArrayList<>();
List<Country> countries = buildIncomingCountries();
List<Country> availableCountries = availableCountries();
return availableCountries.stream()
.filter(countries::contains)
.map(country -> {
List<Domain> availableDomains = getBusinessCountryDomains(country);
return availableDomains;
})
.filter(allDomains::contains)
.collect(Collectors.toList());
}
private static List<Country> buildIncomingCountries() {
// I am mocking the below details
List<Country> countries = new ArrayList<>();
countries.add(new Country("IND",1));
countries.add(new Country("USA",2));
countries.add(new Country("GER",3));
return countries;
}
private static List<Country> availableCountries() {
// I am mocking the below details
List<Country> countries = new ArrayList<>();
countries.add(new Country("IND",1));
countries.add(new Country("KEN",2));
countries.add(new Country("GER",3));
countries.add(new Country("FRA",4));
countries.add(new Country("JPN",5));
countries.add(new Country("CHN",6));
countries.add(new Country("UAE",7));
countries.add(new Country("IRE",8));
return countries;
}
private static List<Domain> getBusinessCountryDomains(Country country) {
// I am mocking the below details based on the country
List<Domain> domains = new ArrayList<>();
domains.add(new Domain(".in","IND"));
domains.add(new Domain(".zim","ZIM"));
domains.add(new Domain(".den","DEN"));
domains.add(new Domain(".fra","FRA"));
return domains;
}
}
@Data
@AllArgsConstructor
class Country {
private String name;
private Integer code;
}
@Data
@AllArgsConstructor
class Domain {
private String name;
private String country;
}