Technology sharing

Unum articulum ad libitum intelligere in Java

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. Ad libitum

Libitum est novum genus in java8 introductum. Praecipuum problema quod solvit est NullPointerException.
Translatio textus originalis (Baidu translatio, defectus meos in English): obiectum continens, quod bona non-nulla continere potest vel non potest. Praesens () verum reddet si praesens pretii est. Si nullius pretii, obiectum vacuum consideratur et praesens () falsum recurrit.
Additae methodi providentur quae pendent a praesentia valoris contenti, ut orElse() (redit valorem default si valor praesens non est) et praesens () (actionem cum praesentis pretii praestat).
Hoc genus valoris fundatum est; Exempli causa, synchronisatio in futura emissione deficere potest.

Munus nucleum hic intelligo quod transire potes isPresent() modum inanitate obiecti iudicandi et transiremap(), orElse()ifPresent() Ceterorum modorum compositio valde prolixam reducere potest si iudicium in codice.

2. Communiter interfaces

先介绍一下常用所有的接口;
注意:
	1. 此列表是列出了本人觉得有意义的接口不是全部。
	2. 当前jdk版本为17,其他版本可能会没有一些方法,例如:`or()` 方法在jdk1.9中增加的
  • 1
  • 2
  • 3
  • 4
Interface nomen tuumBrevis descriptio muneris
Optional<T> empty()Construe inanisOptional object
Optional<T> of(T value)Construe non vacuaOptional object if为空则报错
Optional<T> ofNullable(T value)aedificare a *Optional Obiecto, vacuam esse liceat!
T get()Accipere valorem objectum generale, si valorem为空,则报错
boolean isPresent()Inanis nisinull Tum esttrue
boolean isEmpty()si vacuanull Tum esttrue
ifPresent(Consumer)Transire munus interface par, cum data不为空Hoc munus fit, cum
ifPresentOrElse(Consumer, Runnable) Duo parametri, quorum primus inanis non est effectus, secundus vero inanis est effectus. Omnes interface functiones sunt.
Optional<T> filterFiltrum pro obiecti
Optional<U> map(Function)Conversio modum
Optional<U> flatMap(Function)Methodus conversionis, communiter cum conversione multi-strati ad unum tabulatum adhibita
Optional<T> or(Supplier)Questus objectum为空Cum creando novum munus interface fundaturOptionalobject
T orElse(T)Questus objectum为空Ut certum genus objectum
T orElseThrow()不为空 Revertere rem;为空 sedNoSuchElementException
T orElseThrow(Supplier)不为空 Revertere rem;为空 sed指定异常

2.1 Communia interfaces facile utantur

下面是常用接口的一些简单的演示
  • 1

2.1.1 Modi communes creationis

// 1. 构建一个空的 Optional 对象没有任何问题
Optional<Object> empty = Optional.empty();

 // 2. 构建一个非空的 Optional 对象没有任何问题
 Optional<Object> aa = Optional.of("123");
 // 3. 构建一个空的 Optional 对象直接报错  ================ 会报错 of不允许为空
 Optional<Object> bb = Optional.of(null);

 // 4. 构建一个空的 Optional 对象没有任何问题
 Optional<Object> cc = Optional.ofNullable(null);

 // 5. 构建一个非空的 Optional 对象没有任何问题
 Optional<Object> dd = Optional.ofNullable("123");

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

2.1.2 Modi communes obtinendi valores


Optional<Object> cc = Optional.ofNullable(null);
// 1. 如果为空的时候获取值就会直接报错
Object o = cc.get();
// 2. 如果对象为空,则获取 or 中的 get 方法的值,否则则获取cc的 get 方法中的值
Object o1 = cc.or(() -> Optional.ofNullable("123")).get();
// 3. 如果对象为空,则直接获取的是 123, orElse()中的参数是非空的。 如果对象不为空则直接获取到对象的值
Object o2 = cc.orElse("123");
// 4. 如果对象为空,则获取 or 中的 get 方法的值,否则则获取cc的 get 方法中的值
Object o3 = cc.orElseGet(() -> Optional.ofNullable("123"));

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2.1.3 Modi Judicii Communia

Optional<Object> cc = Optional.ofNullable(null);
// 1. 存在则返回true
boolean present = cc.isPresent();
// 2. 为null返回true
boolean empty = cc.isEmpty();
  • 1
  • 2
  • 3
  • 4
  • 5

2.1.4 Operandi modum post iudicium


Optional<Object> cc = Optional.ofNullable(null);
// 1. 如果对象不为空,则执行方法体的内容,否则没有任何操作
cc.ifPresent(item->{
    System.out.println("不为空则执行我"+item);
});

// 2. 如果对象不为空,则执行方法体的内容,否则没有任何操作
cc.ifPresentOrElse(item->{
    System.out.println("不为空则执行我"+item);
},()->{
    System.out.println("为空则执行我");
});

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

2.2 Introductio ad tabulam methodi

map 方法的使用跟 Stream 中的map方法一样,我的理解这里面的所有的接口方法与 Stream 中重名的用法都是一样的
  • 1

@Data
public static class User{
    private String name;
    private Integer age;
}
@Test
void getMapTest(){

    User user = new User();
    user.setName("123");
    Optional<User> optionalUser = Optional.of(user);
    // 1. 直接获取 user 对象的 name 的值,这里 map 是当用户不为空的时候执行的
    Optional<String> name = optionalUser.map(User::getName);
    System.out.println(name.isEmpty()); // 输出 false

    Optional<User> optionalUser2 = Optional.ofNullable(null);
    // 2. 直接获取 user 对象的 name 的值,这里 map 是当用户不为空的时候执行的
    Optional<String> name2 = optionalUser2.map(User::getName);
    System.out.println(name2.isEmpty()); // 输出 true
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

2.2 Aliae rationes

Alii modi:

2.2.1 Modus Saccare

filter Haec methodus est percolandi;Optional<Path> p = uris. stream().filter(uri -> !isProcessedYet(uri)).findFirst() .map(Paths::get); Plerumque numquam hic usus sum et sentit sicut non est usus missionis.

2.2.2 FlatMap method

flatMap: modum hunc conversionis detegentem esse intelligo: Put Stream<Optional<T>> Convertere adOptional<T>

Stream<Optional<T>> os = ....
Stream<T> s = os.flatMap(Optional::stream)
  • 1
  • 2

3. Communiter exempla

TODO 这里后面再不吧,暂时也没有太合适的例子
  • 1

4. Libri

Optional In Java introducta VIII praebet viam elegantiorem et tutam potentialiter nullas bonas tractandas.maxime peror ,orElse , ifPresent Exspectans methodos functiones ut spatium vacuum eleganter determinet et operationem perficiat postquam vacua non est, hoc plures strationes reducere potest.if Judicium facit in codice elegans, at incommoda are函数式 methodum rediget promptitudinis codicem.ac etiam opus estLambda Intellectus quamdam quantitatem accipit.