2016-12-16 2 views
-3

아래 코드를 작성하고 싶습니다. Java8 스트림과 함수형 프로그래밍을 사용하고 싶습니다.복잡한 방법을 람다 식으로 변환

private static void algoritmoSolC(List<Storage> freeSpaces, Double dimPacket, Double nPackets, 
      int storageIndex) { 
     if (nPackets == 0) 
      return; 

     List<Storage> list = new ArrayList(freeSpaces) { 
      public Object get(int index) { 
       if (index < 0) { 
        index = Math.abs(index); 
       } else if (index >= size()) { 
        index = index % size(); 
       } 
       return super.get(index); 
      } 
     }; 
     for (int i = 0; i < nPackets; i++) { 
      Storage storage = list.get(storageIndex); 
      if (storage.getFreeSpace() > dimPacket) { 
       storage.setFreeSpace(storage.getFreeSpace() - dimPacket); 
       ++storageIndex; 
      } else { 
       ++storageIndex; 
       ++nPackets; 
      } 
     } 
    } 

기능 프로그래밍에서 코드를 변환하면 결과에 소요되는 시간이 줄어 듭니다. 누군가이 코드 스 니펫을 변환하는 데 도움을 줄 수 있습니까? 사전에 덕분에

+0

:-) 코드 당신이 무엇을 원하는 정확히 않는

IntStream .range(storageIndex,Integer.MAX_VALUE) .mapToObj(i-> freeSpaces.get(Math.abs(i) % freeSpaces.size())) .filter(storage -> storage.getFreeSpace() > dimPacket) .limit(nPackets) .forEach(storage.setFreeSpace(storage.getFreeSpace() - dimPacket)) 

정말 놀라 울 정도로 더 우아한 탄트 인이 보면 해야 할 것? 더 구체적으로 말하십시오. – Stefan

+0

가능한 경우 lamda 표현식을 원합니다! – Zaknafein

답변

2

그냥 .. 정말 그것을 테스트하지만, 이것에 대해 갈 수 :

+0

감사. 예, 우아하고 일합니다! – Zaknafein

관련 문제