流和功能接口:在流中抛出异常并聚合它们

时间:2018-05-10 10:51:37

标签: java java-8 functional-programming java-stream

我是流媒体和功能界面的新手,只是想知道这个要求是否可以通过它们完成。给定一个整数数组,如果它们中的任何一个是负数,那么不要处理,而是抛出包含所有负整数的异常。

- (IBAction)Plus:(id)sender {
    [self.mySlider setValue:self.mySlider.value+1];
    NSInteger index = mySlider.value;
    [self.imageView setImage:[UIImage imageNamed:[NSString stringWithFormat:@"%@.png", [imagenArray objectAtIndex:index]]]];
    [_counter setText:[NSString stringWithFormat:@"%d/%lu", index+1, (unsigned long)imagenArray.count]];

 }

- (IBAction)Menus:(id)sender {
    [self.mySlider setValue:self.mySlider.value-1];
    NSInteger index = mySlider.value;
    [self.imageView setImage:[UIImage imageNamed:[NSString stringWithFormat:@"%@.png", [imagenArray objectAtIndex:index]]]];
    [_counter setText:[NSString stringWithFormat:@"%d/%lu", index-1, (unsigned long)imagenArray.count]];

 }

我知道如何使用for循环来实现这一点,但如果可以通过流和功能接口实现这一点真的很好奇。所以任何帮助都表示赞赏。

Example: INPUT = [0, -1, -2] 
EXPECTED Exception: invalid integers: (-1, -2).

1 个答案:

答案 0 :(得分:0)

您可以按照以下操作

public static void main(String[] args)  {
    List<Integer> list = Arrays.asList(1, 2, 3, -3, -2);
    checkList(list);
}

private static void checkList(List<Integer> list) {
    list.stream().filter(i -> i < 0).findFirst()
            .ifPresent(integer -> {
                throw new IllegalArgumentException("Invalid are" + 
                             Arrays.toString(list.stream().filter(i -> i < 0).toArray()));
            });
}

哪个会给出

Exception in thread "main" java.lang.RuntimeException: Invalid are[-3, -2]