2017-12-04 4 views
-1

모든 것의 주먹, 나는 Java에 대해 상당히 새로운 것입니다. 문제에 대한 나의 접근 방식이 최적이 아닐 수도 있습니다.람다를 사용하여 Hashtable에 값을 추가하십시오.

내가 문자열의 일부 목록이, 값 세트에서 4 항목 각을 포함 {"a", "b", "e", "g"}{"no", "a", "g", "great"}을 말한다.

나는 각 Stringint 값을 할당 • 그래도 세트의 Hashtable, 을 만들려고합니다.

class bla { 
    static Map stuff; 
    static { 
     // If I write it like this, I get the error "Cannot resolve method ContainsAll" 
     stuff.put("g", (aList) -> (aList.containsAll(Arrays.asList("a", "b", "e", "g")) ? 1 : 2)); 
    } 
} 

나는 경우 : 특정 String를 들어, 나는에 포함되는리스트에다른 항목, 같은 뭔가를 기반으로 그것을 다른 값을 할당 할 람다 식를 사용하려면 List<String>(aList)에 추가하면 (List <String> aList)이되고 "람다 식의 대상 유형은 인터페이스 여야합니다."오류가 발생합니다. "예상 오류"

내가 람다 몸에 {}()를 교체하는 경우

, 나는 얻을.

어떻게 작성하면 되나요? 아니면 더 좋은 생각이 있습니까?

+4

사용중인 클래스의 javadoc을 읽는 대신 임의의 작업을 시도하는 것 같습니다. 첫 번째 힌트 : JDK의 메소드는 대문자로 시작하지 않습니다. –

+0

^당신은 거의 당신이 원하는 것을하기 위해 람다가 필요하지 않습니다. – EvanM

+1

또한 원시 형식을 사용하지 마십시오. 원하는 Map 을 원한다. 지도가 아닙니다. –

답변

0

트릭을 수행해야합니다.

아, Map<String,Integer>을 원하고 Hashtable을 원하지 않습니다. Hashtable은 더 이상 사용되지 않지만 대부분의 사용 사례에서는 매우 나쁘고 느립니다.

import java.util.*; 
import java.util.function.*; 
import java.util.stream.*; 
public class Main { 
    public static void main(String[] args) { 
    Map<String,Integer> map = Stream.of("no", "a", "g", "great") 
     .collect(Collectors.toMap(
     Function.identity(), 
     x -> Arrays.asList("a", "b", "e", "g").contains(x) ? 1 : 2 
    )); 
    System.out.println(map); 
    } 
} 

출력 :

{a=1, no=2, g=1, great=2} 
+0

고마워요,하지만 제 자신을 분명히하지 않은 것 같습니다.그래서, 나는 그들에게 값을 할당하는 HashMap에서 키로 사용하고자하는 많은 문자열을 가지고 있습니다. 또한 고정 된 수의 문자열 목록을 가지고 있습니다. 예를 들어 4와 같이 HashMap의 값을 기반으로 새로운 정수 목록을 만들고 싶습니다. 하나 이상의 문자열은 특정 목록의 일부인 경우 다른 값을 할당해야합니다 (어떤 순서가 아닌 특정 문자열로 이루어짐). 나는 이것이 이것이 더 분명 해졌기를 바란다. –

0

나는 마지막 .. 내 실수를 발견했다. 나는 HashMap의지도 (문자열, 인터페이스 이름)과하지 (문자열, 정수로 정의 될 필요가 실현

stuff.put("g", (aList) -> (aList.containsAll(Arrays.asList("a", "b", "e", "g")) ? 1 : 2)); 

: 난 내가 원하고 내가이 라인에 집중되었다 내가 게시 된 코드가 더 생각이었다 알고) :

interface Something{ 
    int doStuff(List<String> blabla); 
} 

class bla{ 
    static Map<String, Something> stuff; 
    static{ 
     stuff = new HashMap<>(); 
     stuff.put("a", (List<String> aList) -> 30); 
     stuff.put("g", (List<String> aList) -> aList.containsAll(Arrays.asList("a", "b", "e", "g")) ? 10 : 25); // I only need this for a few of the strings 
    } 
} 
관련 문제