foo

Java8的Stream方法findAny空指针异常(NullPointerException)实例对比

本秂侑毒 提交于 2019-12-01 12:29:59
实战介绍 学习完Java8的Stream方法,可能你正准备大展身手,却发现遇到不少问题,本篇文章为大家带来一个findAny方法抛出java.lang.NullPointerException的场景。 实战内容 先看一下下面的代码,猜测一下执行之后会打印什么? public class FindAnyTest { @Test public void test() { List<Foo> list = new ArrayList<>(); list.add(new Foo()); // 方法一 Integer id = list.stream().map(Foo::getId).findAny().orElse(null); System.out.println(id); // 方法二 id = list.stream().findAny().map(Foo::getId).orElse(-1); System.out.println(id); } } class Foo { Integer id; public Integer getId() { return this.id; } } 然后,执行单元测试方法,你会发现方法一抛出了异常: java.lang.NullPointerException 如果删除方法一,只执行方法二,则不会出现异常。为什么呢? 具体分析 首先方法一种

3-11 group操作拓展

无人久伴 提交于 2019-12-01 10:07:43
In [1]: import pandas as pd import numpy as np df=pd.DataFrame({'A':['foo','bar','foo','bar', 'foo','bar','foo','foo'], 'B':['one','one','two','three', 'two','two','one','three'], 'C':np.random.randn(8), 'D':np.random.randn(8)})#randn=>具有标准正态分布 df Out[1]: /*--> */ /*--> */ A B C D 0 foo one 1.126165 -0.676814 1 bar one -1.429697 -0.464149 2 foo two -0.383661 -0.309679 3 bar three 0.945099 1.375307 4 foo two -0.296882 -0.630503 5 bar two 2.526570 -1.142886 6 foo one -0.848323 -0.310705 7 foo three -1.683177 -1.371868 In [2]: grouped=df.groupby('A') grouped Out[2]: <pandas.core.groupby.generic

第二十二天:有关类的一些方法

不打扰是莪最后的温柔 提交于 2019-12-01 07:29:52
目录 classmethod 作用 使用方法 staticmethod 作用 使用方法 isinstance issubclass 反射 hasattr getattr setattr delattr 魔法方法 什么是魔法方法 几种常用的魔法方法 单例模式 什么是单例模式 作用 classmethod classmethod是python自带的装饰器 作用 装饰定义在类中的函数,使这个函数变成类的绑定方法,我们都知道对象的绑定方法的特殊之处在于,它会把对象当作第一个参数传入,而类的绑定方法与此相似,它会把对象当第一个参数传入。 使用方法 class Test: @classmethod def call(cls): pass staticmethod 与classmethod相同,它也是一种python自带的装饰器 作用 装饰定义在类内部的函数,使这个函数既不是类的绑定方法,也不是对象的绑定方法 使用方法 class Test: @staticmethod def call(): pass isinstance python的内置函数, 用于判断一个对象是否是一个类的实例 ,该函数有两个参数,需要传个对象和一个类,返回一个布尔值 class Foo: pass foo = Foo() print(isinstance(foo,Foo)) issubclass python 内置函数

day22 学习小结

江枫思渺然 提交于 2019-12-01 07:28:05
目录 classmethod classmethod是什么? 用classmethod绑定方法的目的 类的绑定方法的特殊之处 (对象的绑定方法的特殊之处) 如何使用classmethod staticmethod staticmethod是什么? 为什么要使用staticmethod? 如何使用staticmethod isinstance issubclass 反射 什么是反射 反射的使用 魔法方法 单例模式 classmethod classmethod是什么? classmethod是一个装饰器,可以用来装饰类内部的方法,使该方法绑定给类来使用。 用classmethod绑定方法的目的 类的绑定方法的特殊之处 classmethod使被装饰的方法只能由类来调用,而且该方法会将类当做第一个参数传给该方法。这种方法被称为 类的绑定方法 。 (对象的绑定方法的特殊之处) 由对象来调用,会将对象当做第一个参数传给该方法。 如何使用classmethod 和正常装饰器一样,在需要被装饰的函数上方@classmethod就可以了。 staticmethod staticmethod是什么? staticmethod是一个装饰器,可以装饰给 类内部 的方法,使该方法既不绑定给对象,也不绑定给类。 为什么要使用staticmethod? 在类内部使用@staticmethod

第二十一天:组合,多态,封装.....

与世无争的帅哥 提交于 2019-12-01 05:09:15
目录 组合 什么是组合 组合的作用 如何使用组合 封装 什么是封装 为什么封装 如何封装 访问限制机制 什么是访问限制机制 访问限制机制的目的 property 什么是property 为什么要用property 如何使用property 多态 什么是多态 多态的目的 如何实现 抽象类 什么是抽象类 目的 如何使用 鸭子类型 什么是鸭子类型 多态炫技 组合 什么是组合 组合指的是一个对象中的属性,该属性的值指向的是另一个对象。 组合的作用 组合的目的和继承一样,为了减少代码冗余 如何使用组合 class People: def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex class Teacher(People): def __init__(self,name,age,sex): super().__init__(name,age,sex) class Student(People): def __init__(self,name,age,sex): super().__init__(name,age,sex) class Date: def __init__(self,year,month,day): self.year=year self.month=month self.day

day 20 小结

China☆狼群 提交于 2019-12-01 02:36:20
目录 继承 1.什么是继承 2.为什么要继承 3.如何实现继承 寻找继承关系 继承背景下对象属性查找顺序 1.对象查找属性会从对象的名称空间中查找 2.若对象没有,则回去类里面找 3.若当前类是子类,并且没有对象找的属性,回去父类中查找 派生 什么是派生 子类派生出新的属性,并重用父 方式一: 方式二: 新式类和经典类 新式类: 经典类 菱形继承 通过继承实现修改json模块数据类型 继承 1.什么是继承 ​ 继承指的是新建类的方法,新建的类称之为字类或派生类 ​ 字类继承的类叫做父类,也称之为基类或超类 继承的特征: ​ 子类可以继承父类的属性(特征与技能),并且可以派生出自己的属性(特征与技能) ​ 注意: 在python中,一个子类可以继承多个父类 2.为什么要继承 ​ 继承的目的是为了减少代码的冗余(减少重复代码) 3.如何实现继承 ​ 1.首先要确定谁是子类,谁是父类. ​ 2.在定义类时,子类 + (), ()内写父类,实现继承 # 父类 class ParentClass1: pass class ParentClass2: pass # 子类 class SubClass1(ParentClass1) pass #查看继承的父类:__bases__, 时类的属性,用来查找当前父类 print(SubClass1.__bases__) 寻找继承关系 如何寻找继承关系:

vim中的替换操作

好久不见. 提交于 2019-11-30 17:07:22
  在vim中 :s(substitute)命令用于查找并替换字符串。使用方法如下: :s/<find-this>/<replace-with-this>/<flags>   例如: 1 :%s/foo/bar/g # 在全局范围内(%)查找foo并将之替换为bar,所有出现都会被替换(g) 2 :s/foo/bar/g # 在当前行内查找foo并将之替换为bar,所有出现都会被替换(g) 3 :'<,'>s/foo/bar/g # 在选区内进行替换,Visual模式下选择区域后输入会自动补全'<,'>   下面是一些可以加的flag. for example, :s/cat/dog/gi 会把cat.Cat() 变成 dog.dog().   g—global replace: replace every occurrence of the pattern, not just the first one   c —confirm each substitution: prompt the user before replacing the text   e —do not show errors if no matches are found   i —ignore case: make the search case-insensitive   I —make the

JS-面向对象-函数的参数

旧时模样 提交于 2019-11-30 02:08:25
<!DOCTYPE html> < html lang = " zh " > < head > < meta charset = " UTF-8 " > < meta name = " viewport " content = " width=device-width, initial-scale=1.0 " > < meta http-equiv = " X-UA-Compatible " content = " ie=edge " > < title > Document </ title > </ head > < body > < script > // 形参:创建函数时声明的参数。 // 实参:调用函数时(实际)传入的参数。 // JS 中的函数不限制参数的数量,也不限制参数的类型。 function foo ( x , y , z ) { // 函数体内有一个 arguments 类似于数组的对象,对象中保存着所有传入的实参 console . log ( arguments ) console . log ( arguments . length ) // 实参的数量 console . log ( foo . length ) // 形参的数量 if ( x > y ) { return x ; } else { return y ; } } // JS

bind call apply 的区别和使用

蹲街弑〆低调 提交于 2019-11-29 17:45:17
bind call apply 的区别和使用: https://www.jianshu.com/p/015f9f15d6b3 在讲这个之前要理解一些概念,这些概念很重要,有人说过学会了javascript 的this 就基本会了一半的javascript 在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向。 JavaScript 的一大特点是函数存在: 定义时上下文 运行时上下文 上下文是可以改变 如果要深入理解这个知识要开个javascript 内存管理机制和运行原理了,这里就不做过多的介绍了。 function Fruits() {} Fruits.prototype = { color: "red", printf: function() { console.log("My color is " + this.color); } } var apple = new Fruits; apple.printf(); //My color is red // 改变this banana = { color: "yellow" } apple.printf.call(banana); //My color is yellow apple.printf.apply

变量不同作用域的测试

痴心易碎 提交于 2019-11-29 16:01:40
source code: < html > < script > var x = 10 ; foo = { x : 20 , bar : function ( ) { var x = 30 ; return this . x ; } } console . log ( foo . bar ( ) , ( foo . bar ) ( ) , ( foo . bar = foo . bar ) ( ) , ( foo . bar , foo . bar ) ( ) ) ; // 20 20 10 10 </ script > </ html > 第一个foo.bar(): 进入函数体执行时this 指向foo对象,因此this.x为20 第二种写法实际等价于第一种: 第三次执行this指向全局变量Window: 第四次的逗号表达式等价于第三次执行: 要获取更多Jerry的原创文章,请关注公众号"汪子熙": 来源: https://blog.csdn.net/i042416/article/details/100849511