2016-10-24 3 views
1

하나의 ArrayList에 사각형이 채워져 있습니다. 나는 Map에 내용을 추가하고 싶습니다. Key는 X 좌표이고 value는 같은 X 코드가있는 List입니다.지도에 값을 추가하는 중 호환되지 않는 유형

나는 함수

void dummyFun(List<Rectangle> listRects) 
{ 
    Map<Integer, List<Rectangle>> mapSameXCordRectangles = new HashMap<>(); 
    listRects.forEach((Rectangle table) -> 
    { 
     if(mapSameXCordRectangles.containsKey(table.x)) 
     { 
      mapSameXCordRectangles.get(table.x).add(table); 
     } 
     else 
     { 
      List<Rectangle> lstRect = new ArrayList<>(); 
      lstRect.add(table); 
      mapSameXCordRectangles.put(table.x, lstRect); 
     } 
    }); 
} 

을 가진하여이 작업을 수행 할 수 있습니다하지만 난 다음과 같은 뭔가 경우-else 문을 제거합니다.

void dummyFun1(List<Rectangle> listRects) 
{ 
    Map<Integer, List<Rectangle>> mapSameXCordRectangles = new HashMap<>(); 
    List<Rectangle> lstTemp = new ArrayList<>(); 
    listRects.forEach((Rectangle table) -> 
    { 
     mapSameXCordRectangles.put(table.x,mapSameXCordRectangles.containsKey(table.x) ? mapSameXCordRectangles.get(table.x).add(table): new ArrayList<>().add(table)); 
    }); 
} 

부울을 목록으로 변환 할 수 없으므로 오류가 발생합니다. 지도에서 ArrayList에 새 Rectangle을 추가하거나 새 ArrayList를 만들면 대신 ArrayList를 반환하기 위해 부울 값을 반환합니다.

어떻게하면됩니까? ?

mapSameXCordRectangles.put(
    table.x, 
    mapSameXCordRectangles.containsKey(table.x) ? 
    mapSameXCordRectangles.get(table.x).add(table) : 
    new ArrayList<>().add(table)); 

귀하의 부울 :

답변

3

난 당신이

Map<Integer, List<Rectangle>> map = listRects.stream() 
              .collect(Collectors.groupingBy(r -> r.x)); 
4

groupingBy이 코드를 살펴 가질 수 있습니다 사용하는 것이 좋습니다 잘 작동을; 귀하의 문제는 : 전화 List.add()부울 값을 반환합니다. 그리고 귀하의지도는 단순히 을 수락하지 않습니다. 부울 값! 이 문제를 방지하기 위해

하나의 옵션 : 작업 할 몇 가지 임시 목록 개체를 사용

List<Rectangle> workingList = 
    mapSameXCordRectangles.containsKey(table.x) ? 
    mapSameXCordRectangles.get(table.x) : 
    new ArrayList<>()); 
workingList.add(table); 
mapSameXCordRectangles.put(
    table.x, workingList); 

은 어쨌든 그런 스타일을 추천 할 것입니다. 가능한 경우 많은 문장을 한 줄에 넣는 것이 "훌륭합니다"라고 사람들은 생각합니다. 하지만 그 일은 : 코드는 가독성이있는으로 작성되어야합니다. 그리고 실제로 제 의견은 초기 입력보다 소화가 더 쉽다고 생각합니다.

+0

제안 해 주셔서 감사합니다. – nandeesh

+0

안녕하십니까. – GhostCat