どのように私は、ストリームを使用してJava 8と同じ機能を実現することができます

Ipkiss:

私は何をしたかったことは連続した注文が同じ郵便番号を持っている場合、それ以外の場合は、10分を追加する旅に30分を追加しました。私は、次のようなクラスを持っている場合たとえば、これは私が命令的にそれを実現する方法です。

@Data
@AllArgsConstructor
public static class Order{
    private String orderNumber;
    private final String postCode;
}

Order order1 = new Order("1","N1");
Order order2 = new Order("2","N1");
Order order3 = new Order("3","N3");
Order order4 = new Order("4","N4");

List<Order> orders = List.of(order1, order2, order3, order4);

int totalMin = 0;
for (int i=0;i < orders.size()-1 ; i++ ){
  if (orders.get(i+1).getPostCode().equals(orders.get(i).getPostCode())){
      totalMin+=10;
    }
  else{
      totalMin+=30;
  }
}

System.out.println(totalMin) // 70
if order 2 is new Order("2","N2"); // 90

どのように私は同じことを達成するため、またはJava 8つのストリームを使用して、上記変換することができますか?私は(軽減)機能を試してみましたが、それのまわりで私の頭を取得できませんでした。

davidxxx:

あなたは使うことができIntStream、そのために:

int totalMin =
IntStream.range(0, orders.size()-1)
         .map(i-> orders.get(i+1).getPostCode().equals(orders.get(i).getPostCode()) ? 10 : 30)
         .sum();

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=230742&siteId=1