Stream
注意点:(1)使用peek操作流,流中的元素没有改变。
(2)peek对一个对象进行操作的时候,对象不变,但是可以改变对象里面的值。
当看到第(1)点时,会觉得peek只是用于debug查看流水线输出情况的,但是可以利用第(2)点对数据做一些处理。
例如:
- public class Test {
- public static void main(String[] args) {
-
- List
collect = Arrays.asList(new Person("001", "ms"), new Person("002", "ls")) - .stream().filter(p -> "ls".equals(p.getName())).peek(p -> p.setId("000")).collect(Collectors.toList());
- collect.forEach(c-> System.out.println(c));
- }
- }
-
- @AllArgsConstructor
- @Data
- public class Person {
- private String id;
- private String name;
- }
当容器中存在某类型的Bean时才注入容器,否则不注入容器。
如果是结合多个Bean判断,示例:
- @Bean
- @ConditionalOnBean(value = {Notifier.class,AsyncEventBus.class})
- public UserEventBus userEventBus(Map
notifiers,Map eventBus) { -
- return new UserEventBus(Collections.singletonList(notifiers.values()),Collections.singletonList(eventBus.values()));
- }
- //当Optonal为空时,orElse、orElseGet都会执行
- //当Optional有值时,orElse会执行,而orElseGet不会执行
- Optional.of("Tag").orElse(getNewTag());
- Optional.of("Tag").orElseGet(() -> getNewTag());
- public static String getNewTag() {
- return "Tag1";
- }
- @AllArgsConstructor
- @Data
- public class Person {
- private String name;
- private String phone;
- }
-
-
- List
personList =new ArrayList<>(); - personList.add(new Person("aaa","1111"));
- //属性赋了空值
- personList.add(new Person("bbb",null));
-
- Map
collect1 = personList.stream().collect(Collectors.toMap(Person::getName, Person::getPhone)); - System.out.println(collect1);
-
-
- /*
- Exception in thread "main" java.lang.NullPointerException
- at java.util.HashMap.merge(HashMap.java:1225)
- at java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1320)
- at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
- at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1384)
- at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482)
- at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
- at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
- at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
- at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
- at .Test.main(Test.java:15)
- */
-
- // 这样的转换不会报错
- HashMap collect2 = personList.stream().collect(HashMap::new, (newMap, entity) -> newMap.put(entity.getName(), entity.getPhone()), HashMap::putAll);
- System.out.println(collect2);
- List
fieldList=new ArrayList<>(); - fieldList.add(new FieldInfo("a2", "type", true,false));
- fieldList.add(new FieldInfo("a7", "type", false,false));
- fieldList.add(new FieldInfo("a6", "type", true,false));
- fieldList.add(new FieldInfo("a4", "type", false,false));
- fieldList.add(new FieldInfo("a5", "type", true,false));
- fieldList.add(new FieldInfo("a10", "type", false,false));
- List
sortFields=fieldList.stream().sorted(Comparator.comparing(FieldInfo::isValid).reversed().thenComparing(FieldInfo::getName)).collect(Collectors.toList());