一个奇葩逻辑-判断list中的连续非空字符串是否在局左的位置

判断list中的连续非空字符串是否在局左的位置

  • 1、概述
  • 2、场景介绍与实现方法
    • 2.1、场景介绍
    • 2.2、实现方法
    • 2.3、验证
  • 3、总结

1、概述

大家好,我是欧阳方超,可以关注我的公众号“欧阳方超”,后续内容将在公众号首发。
我把一个需求按奇葩方式实现了,因为找不到更好的实现方式了。下面我就介绍下我的思路,欢迎各位批评指正,有更好的方式敬请留言。

2、场景介绍与实现方法

2.1、场景介绍

Excel中有四列,我想根据这四列的填值情况进行后续的操作。具体来说是这样的,这四列中允许出现空值,但是不允许前面已经出现了空值,而后面又出现非空值的情况,我把这种逻辑归纳为连续非空值靠左出现才合法,其他的一律视为非法。

2.2、实现方法

直接献上代码:

private static boolean isNonEmptyListContinuous4(List<String> list) {
        boolean nonEmptyStarted = false;
        boolean emptyFound = false;

        for (int i = 0; i < list.size(); i++) {
            String value = list.get(i);
            if (value == null || value.isEmpty()) {
                if (nonEmptyStarted) {
                    emptyFound = true;
                } else {
                    return false;
                }
            } else {
                if (emptyFound) {
                    return false;
                }
                nonEmptyStarted = true;
            }
        }

        return nonEmptyStarted;
    }

上面这段代码可以实现想要的逻辑。

2.3、验证

下面进行一下验证。
假设有下面八个list,按照预设的逻辑, 使用isNonEmptyListContinuous()方法判断时,list1应该判为true、list2应该判为false、list3应该判为false、list4应该判为false、list5应该判为false、list6应该判为true、list7应该判为false、list8应该判为true

List<String> list1 = Arrays.asList("A", "B", "C", "D");
List<String> list2 = Arrays.asList("A", null, "C", "D");
List<String> list3 = Arrays.asList("A", "", "C", "D");
List<String> list4 = Arrays.asList("", "B", "C", "D");
List<String> list5 = Arrays.asList("A", "B", "", "D");
List<String> list6 = Arrays.asList("A", "B", "C", "");
List<String> list7 = Arrays.asList("A", "B", null, "D");
List<String> list8 = Arrays.asList("A", "B");

调用isNonEmptyListContinuous4()方法逐个判断list1到list8,

boolean result1 = isNonEmptyListContinuous4(list1);
boolean result2 = isNonEmptyListContinuous4(list2);
boolean result3 = isNonEmptyListContinuous4(list3);
boolean result4 = isNonEmptyListContinuous4(list4);
boolean result5 = isNonEmptyListContinuous4(list5);
boolean result6 = isNonEmptyListContinuous4(list6);
boolean result7 = isNonEmptyListContinuous4(list7);
boolean result8 = isNonEmptyListContinuous4(list8);

System.out.println("List 1: " + result1); // true
System.out.println("List 2: " + result2); // false
System.out.println("List 3: " + result3); // false
System.out.println("List 4: " + result4); // false
System.out.println("List 5: " + result5); // false
System.out.println("List 6: " + result6); // true
System.out.println("List 7: " + result7); // true
System.out.println("List 8: " + result8); // false

返回结果为:

List 1: true
List 2: false
List 3: false
List 4: false
List 5: false
List 6: true
List 7: false
List 8: true

符合预期。

3、总结

也许实现的不够完美,但目前没有想到其他解决办法,如果以后想到了更好的解决办法,再回来用更优雅的方式解决这个逻辑吧。
我是欧阳方超,把事情做好了自然就有兴趣了,如果你喜欢我的文章,欢迎点赞、转发、评论加关注。我们下次见。
一个奇葩逻辑-判断list中的连续非空字符串是否在局左的位置_第1张图片

你可能感兴趣的:(list,数据结构)