如何仅用Java SDK类实现LinkedList元素的流畅链式添加?
Java SDK实现LinkedList链式添加元素
问题背景
需要仅使用Java SDK类,将以下分步添加元素的LinkedList代码:
LinkedList<String> linkedList = new LinkedList<>(); linkedList.add("b"); linkedList.addAll(List.of("c", "d")); linkedList.addFirst("a"); linkedList.addLast("e");
改写为链式调用形式。但原生LinkedList的add()返回boolean,addFirst()/addLast()返回void,无法直接链式调用,以下是几种纯SDK的解决方案:
方案1:双括号初始化(匿名内部类)
利用匿名内部类的实例初始化块,在创建对象时直接执行所有添加操作,写法简洁且贴近链式风格:
LinkedList<String> linkedList = new LinkedList<>() {{ add("b"); addAll(List.of("c", "d")); addFirst("a"); addLast("e"); }};
注意:这种方式会生成LinkedList的匿名子类,若对类的类型有严格限制(比如必须是纯LinkedList类型而非子类)需谨慎使用,但完全基于Java SDK实现。
方案2:借助Optional实现链式调用
通过Optional包装LinkedList对象,利用map()方法在每个操作后返回对象本身,实现严格的链式调用:
LinkedList<String> linkedList = Optional.of(new LinkedList<String>()) .map(l -> { l.add("b"); return l; }) .map(l -> { l.addAll(List.of("c", "d")); return l; }) .map(l -> { l.addFirst("a"); return l; }) .map(l -> { l.addLast("e"); return l; }) .get();
这种方式不会创建子类,完全使用SDK自带的Optional类实现链式操作。
方案3:Stream收集(适合固定顺序元素)
如果元素顺序可以提前确定,用Stream按目标顺序生成元素后直接收集到LinkedList中,也是一种简洁的链式写法:
LinkedList<String> linkedList = Stream.of("a", "b", "c", "d", "e") .collect(Collectors.toCollection(LinkedList::new));
若需要分步拼接不同来源的元素,可使用Stream.concat()组合:
LinkedList<String> linkedList = Stream.concat( Stream.of("a"), Stream.concat(Stream.of("b"), Stream.concat(Stream.of("c", "d"), Stream.of("e"))) ) .collect(Collectors.toCollection(LinkedList::new));
内容的提问来源于stack exchange,提问作者cnmuc
相关产品推荐
相关产品推荐

