Streamflow
Im vorherigen Artikel ging es um eine neue Funktion von Java 8: Lambda-Ausdruck, falls er verwendet wird Geschäft Wenn Sie es geschickt einsetzen, können Sie viel Code einsparen und sehen viel ordentlicher aus. Dann stellt dieser Artikel eine weitere neue Funktion vor: StreamStream, lesen Sie es nicht falsch! ! ! Nicht zum Spielen von Steam! !
1. Was ist Stream:
Stream ist ein neues Konzept, das von Java 8 vorgeschlagen wird, kein Eingabe- und Ausgabe-Stream #🎜🎜 # (Es hat eigentlich nichts mit dem E/A-Fluss zu tun) , sondern ein Tool, das funktionale Programmierung verwendet, um Sammlungsklassen zu bearbeiten. Kurz gesagt handelt es sich um einen Vorgang zur Verarbeitung von Sammlungsdaten in einer internen Iterationsmethode. Durch interne Iteration kann der Sammlungsklasse mehr Kontrolle verliehen werden. Die Funktionen von Stream und Iterator sind ähnlich, mit der Ausnahme, dass Iterator eine Operation ist, die Sammlungsdaten in Form einer externen Iteration verarbeitet.
Natürlich hat Stream auch seine eigenen Eigenschaften:
1 Es ist keine Datenstruktur und speichert keine Daten Definiert für den Originaldatensatz Eine Reihe von Operationen 2 Diese Operationen sind verzögert, das heißt, wann immer auf ein Element im Stream zugegriffen wird, wird diese Reihe von Operationen für dieses Element #🎜🎜 ausgeführt #3 .Da die Daten nicht gespeichert werden, kann jeder Stream nur einmal verwendet werden.
Stream-Implementierungsdiagramm:
2. Stream erstellen: #🎜🎜 ## 🎜🎜# Wenn Sie einen Stream-Stream zum Betreiben einer Sammlung verwenden möchten, müssen Sie das Array oder die Sammlung in einen Stream-Stream konvertieren, bevor Sie ihn betreiben können
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/stream/Stream.html
Schauen wir uns zunächst vier Methoden an:
1.Filter: Bedingte Filterung durch Lambda-Ausdrücke erreichen# 🎜 🎜#2.limit: Stream abfangen, einen Abschnitt des Streams abfangen3.skip: Stream überspringen
4.distinct: Duplikate entfernen
# 🎜🎜#Stream erstellen:
public class Test { public static void main(String[] args) { String [] arr = {"东","南","西","北"}; //将数组转换成Stream Stream<String> stream = Arrays.stream(arr); stream = Stream.of(arr); stream = Stream.of("东","南","西","北"); //将list集合转换成stream List<String> list = Arrays.asList("aa","cc","bb","aa","dd"); stream = list.stream(); //排序、去重、遍历 list.stream().sorted().distinct().forEach(System.out::println); //用过Stream流操作完集合后还可以再转换成一个新的集合 List<String> newList = list.stream().sorted().distinct().collect(Collectors.toList()); System.out.println(newList.toString()); } }
Ausgabe:
//Das Ergebnis Nach dem Durchlaufen und Entfernen von Duplikaten:
aabbccdd
// Nachdem Sie den Stream-Stream zum Betreiben der Sammlung verwendet haben, können Sie ihn auch in eine neue konvertieren Sammlung[aa , bb, cc, dd]
Vier Methodenoperationen:
Personenklasse:
# 🎜🎜#Diese Klasse Es gibt viel Code, daher sind die Get/Set-Methoden nicht eingeschrieben. Vergessen Sie es nicht, wenn Sie es verwenden! !
public class Person { private String name; private Integer age; private String country; private char sex; @Override public String toString() { return "信息表:{" + "name='" + name + '\'' + ", age=" + age + ", country='" + country + '\'' + ", sex=" + sex + '}'; } //这里节省的get/set代码 //重写toString() 和 equals 和 hashcode 方法 @Override public boolean equals(Object o){ if(this == o) return true; if(o == null || getClass() != o.getClass()) return false; Person person = (Person) o; if(country != null){ if(this.country.equals(person.country)){ return true; }else{ return false; } } return false; } @Override public int hashCode(){ return Objects.hash(country); } }
Testklasse:
kombiniert mit Lambda-Ausdrücken zum Schreiben von public class Test {
public static void main(String[] args) {
List<Person> perosnList = new ArrayList<>();
perosnList.add(new Person("王一", 30, "中国", 'M'));
perosnList.add(new Person("张三", 19, "美国", 'F'));
perosnList.add(new Person("李四", 29, "日本", 'F'));
perosnList.add(new Person("小美", 74, "英国", 'M'));
perosnList.add(new Person("熊二", 15, "意大利", 'F'));
perosnList.add(new Person("熊大", 66, "韩国", 'F'));
//返回年龄大于20岁的学生集合
System.out.println("返回年龄大于20岁的学生集合");
perosnList.stream().filter(p -> p.getAge() > 20).forEach(System.out::println);
//返回年龄大于50岁的学生集合
System.out.println("返回年龄大于50岁的集合");
List<Person> list = perosnList.stream().filter(p -> p.getAge() > 50).collect(Collectors.toList());
System.out.println(list);
//返回年龄大于20岁的中国学生
System.out.println("返回年龄大于20岁的中国人");
perosnList.stream().filter(p -> p.getAge() > 20).filter(p -> p.getCountry().equals("韩国")).forEach(System.out::println);
//年龄大于20 中国 性别M
System.out.println("返回年龄大于20 中国 性别M");
perosnList.stream().filter(p -> p.getAge() > 20 && p.getCountry().equals("中国") && p.getSex() == 'M').forEach(System.out::println);
}
}
#🎜 🎜 #Sehen Sie sich die Ergebnisse an:
Geben Sie die Sammlung von Schülern zurück, die älter als 20 Jahre sind
Informationstabelle: {name='王一', Alter=30 , Land ='China', Geschlecht=M}Informationstabelle: {name='李思', Alter=29, Land='Japan', Geschlecht=F}
Informationstabelle: {name= '小Schönheit', Alter=74, Land='UK', Geschlecht=M}Informationstabelle: {Name='Xiong Da', Alter=66, Land='Südkorea', Geschlecht=F}# 🎜🎜# Gibt die Sammlung von Personen zurück, die älter als 50 Jahre sind [Informationstabelle: {name='Xiaomei', Alter=74, Land='UK', Geschlecht=M}, Informationstabelle: {name=' Xiong Da', Alter =66, Land='Südkorea', Geschlecht=F}]Zurück zu Chinesen, die älter als 20 Jahre sind
Informationstabelle: {name='Xiong Da', Alter= 66, Land='Südkorea', Geschlecht=F}Zurück zu Personen, die älter als 20 Jahre sind China GeschlechtMInformationstabelle: {name='王一', Alter=30, Land=' China', Geschlecht=M}
# 🎜🎜#
Zusammenfassung:
Mit Stream Stream können Arrays oder Sammlungen problemlos bedient werden, und zwar Kombiniert mit Lambda-Ausdrücken, um einen Ausdruck übersichtlich und klar zu gestalten. Da es sich tatsächlich um eine neue Funktion handelt, die von Java freigegeben wurde, muss sie nützlich sein.
3. Stream-Map-Mapping-Streampublic class Test { public static void main(String[] args) { //map的作用是迭代取到每个list元素,再通过map里面的函数进行相应的操作 List<String> list1 = Arrays.asList("a","bb","ccc","dddd"); //通过map取到每个集合元素的长度并返回 Stream<Integer> stream = list1.stream().map(p->p.length()); stream.forEach(System.out::println); System.out.println("----------------"); List<String> userList = new ArrayList<>(); userList.add("周杰伦.tom"); userList.add("尼古拉斯.赵四"); userList.add("牛顿.巴基斯"); userList.add("赵少华.思密达"); List<String> uList = userList.stream().map(p->p.substring(p.indexOf(".")+1, p.length())).collect(Collectors.toList()); System.out.println(uList.toString()); } }
Ausgabe:
1#🎜🎜 # 2
34
----------------[tom, Zhao Si, Bachis, Smecta]
# 🎜🎜#4. Stream-Suche und -Abgleich Es gibt auch eine
-Methode in Stream:
Gibt zurück, ob ein Element in Dieser Stream entspricht dem bereitgestellten Wort
Demo:
public class Test { public static void main(String[] args) { List<String> list = Arrays.asList("周杰伦","王力宏","孙燕姿","林俊杰"); boolean flag1 = list.stream().anyMatch(ele->ele.contains("燕")); System.out.println("有没有名字包含燕的同学:"+flag1); //判断开头: boolean flag2 = list.stream().anyMatch(ele->ele.startsWith("王")); System.out.println("有没有名字开头是王的同学:"+flag2); //判断结尾: boolean flag3 = list.stream().anyMatch(ele->ele.endsWith("杰")); System.out.println("有没有名字结尾是杰的同学:"+flag3); // anyMatch是匹配所有的,要满足条件 boolean flag4 = list.stream().anyMatch(ele->ele.length()>2); System.out.println("所有同学的名字都是两个字以上的吗"+flag4); boolean flag5 = list.stream().anyMatch(ele->ele.startsWith("王")); System.out.println("所有同学的名字都有王吗?"+flag5); //noneMatch boolean flag6 = list.stream().noneMatch(ele->ele.contains("燕")); System.out.println("集合中都没有包含'燕'这个字吗"+flag5); } }Ausgabe:
#🎜🎜 # anyMatch(Predicate predicate)
Gibt es Klassenkameraden, deren Namen mit Wang beginnen: true Gibt es Klassenkameraden, deren Namen mit Jie enden? wahrHaben alle Namen der Schüler mehr als zwei Zeichen? wahr
Haben alle Namen der Schüler einen König? trueDie Sammlung enthält nicht das Wort „Yan“. true
Mit der Methode in anyMatch() können die Informationen dieses Streams problemlos abgeglichen werden.Das obige ist der detaillierte Inhalt vonAnalysieren Sie Stream-Flow-Instanzen in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

In dem Artikel werden Maven und Gradle für Java -Projektmanagement, Aufbau von Automatisierung und Abhängigkeitslösung erörtert, die ihre Ansätze und Optimierungsstrategien vergleichen.

In dem Artikel werden benutzerdefinierte Java -Bibliotheken (JAR -Dateien) mit ordnungsgemäßem Versioning- und Abhängigkeitsmanagement erstellt und verwendet, wobei Tools wie Maven und Gradle verwendet werden.

In dem Artikel wird in der Implementierung von mehrstufigem Caching in Java mithilfe von Koffein- und Guava-Cache zur Verbesserung der Anwendungsleistung erläutert. Es deckt die Einrichtungs-, Integrations- und Leistungsvorteile sowie die Bestrafung des Konfigurations- und Räumungsrichtlinienmanagements ab

In dem Artikel werden mit JPA für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden erläutert. Es deckt Setup, Entity -Mapping und Best Practices zur Optimierung der Leistung ab und hebt potenzielle Fallstricke hervor. [159 Charaktere]

Mit der Klassenbelastung von Java wird das Laden, Verknüpfen und Initialisieren von Klassen mithilfe eines hierarchischen Systems mit Bootstrap-, Erweiterungs- und Anwendungsklassenloadern umfasst. Das übergeordnete Delegationsmodell stellt sicher


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

MinGW – Minimalistisches GNU für Windows
Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.

EditPlus chinesische Crack-Version
Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

SublimeText3 Linux neue Version
SublimeText3 Linux neueste Version

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung