>source

Java 사용하기지도의 카시사스 제품을 만들려고합니다.키와목록 < 문자열 >값. 목록을 만들 때 키의 값을 보존해야합니다.

  • A.지도 < 문자열, 목록 < 문자열 > >개체
  • a.목록 < 지도 < 문자열, 문자열 > >개체

나는 또한목록 < 문자열 >원래지도의 값은 0으로 곱하기를 방지하고지도를 만들지 않도록 카시사 제품을 만들 때는 단일 값으로 처리해야합니다. 예를 들어 다음지도는 다음과 같습니다.

{
    "Location Number"= {"100", "500"}
    "Department Number"= {"11", "22", "33"}
    "District Number"= {}
    "Preferred Language"= {"en-US"}
}

는 다음으로 번역됩니다.

{
    {
        "Location Number"= "100"
        "Department Number"= "11"
        "District Number"= {}
        "Preferred Language"= "en-US"
    },
    {
        "Location Number"= "100"
        "Department Number"= "22"
        "District Number"= {}
        "Preferred Language"= "en-US"
    },
    {
        "Location Number"= "100"
        "Department Number"= "33"
        "District Number"= {}
        "Preferred Language"= "en-US"
    },
    {
        "Location Number"= "500"
        "Department Number"= "11"
        "District Number"= {}
        "Preferred Language"= "en-US"
    },
    {
        "Location Number"= "500"
        "Department Number"= "22"
        "District Number"= {}
        "Preferred Language"= "en-US"
    },
    {
        "Location Number"= "500"
        "Department Number"= "33"
        "District Number"= {}
        "Preferred Language"= "en-US"
    }
}

아래는 비슷한 번역을 수행하기 위해 현재 사용중인 code입니다. 그러나 필요한 키를 유지하지는 않습니다. 일반적으로 Java 8 스트림을 사용하여 수행 할 수 있는지 알지 못합니다.

private static List<List<String>> createRuleListFromMap(Map<String, List<String>> ruleMap) {
    List<List<String>> ruleList= new ArrayList<>();
    cartesianProduct(ruleMap.values()).forEach(ruleList::add);
    return ruleList;
}
private static <T> Stream<List<T>> cartesianProduct(Collection<? extends Collection<T>> collections) {
    return cartesianProduct(new ArrayList<Collection<T>>(collections), Collections.emptyList());
}
private static <T> Stream<List<T>> cartesianProduct(List<? extends Collection<T>> collections, List<T> current) {
    return collections.isEmpty() ? Stream.of(current) : collections.get(0).stream().flatMap(e -> {
        List<T> list= new ArrayList<>(current);
        list.add(e);
        return cartesianProduct(collections.subList(1, collections.size()), list);
    });
}

  • 이전 python : 플라스크 실행 명령 폴더 위치 변경 후 실패합니다
  • 다음 mysql -0에서 시작하려면 자동 증분을 설정하는 방법