2016-12-16 7 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

あなたはに正確に何をしたいです:-)あなたのコード驚くほどエレガント・タントであります行う?より具体的にしてください。 – Stefan

+0

可能であれば、ラムダ式が欲しい! – Zaknafein

答えて

2

didntのは実際にそれをテストしたが、それはこのことについて行くことができる:

この見れ
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)) 

それは本当に

+0

ありがとうございます。はい、それはエレガントで作品です! – Zaknafein

関連する問題