具有特定结构的就绪对象包装类

时间:2015-03-23 16:58:03

标签: java java-8

简短的问题。

出于某些目的,特别是在java-8及其流中,有一些像这样的包装类很方便:

class ObjectWrapper<T> {
   T obj;
   boolean set(T obj) {
      this.obj = obj;
      return true;
   }
}

使用stream().filter(...)条件来填充自定义对象(与集合项不同)的搜索结果可能会很不错。

java-8中是否有类似的现成课程?


编辑人们会询问使用示例。好。这是一个非常牵强的例子,但它显示了主要思想:找到奇数长度的第一个单词并保存(返回)它的长度。

    List<String> collection = Arrays.asList("ab", "abc3d", "ab", "affdd");

    class ObjectWrapper<T> {
        T obj;
        boolean set(T obj) {
            this.obj = obj;
            return true;
        }
    }

    ObjectWrapper<Integer> oddWordLength = new ObjectWrapper<Integer>();

    collection.stream().filter(s -> s.length() % 2 != 0 && oddWordLength.set(s.length())).findFirst();

1 个答案:

答案 0 :(得分:3)

你的例子:

List<String> collection = Arrays.asList("ab", "abc3d", "ab", "affdd");
  

找到奇数长度的第一个单词并保存(返回)其长度。

一个简单的解决方案:

return  collection.stream()
                  .filter(s -> s.length() % 2 != 0)
                  .mapToInt(String::length)
                  .findFirst()

注意,这将返回OptionalInt,这样如果您的List为空,则会返回OptionalInt.empty()

您的持有人课程没有必要。