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! !
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
Offizielle Dokumentation von Stream: # 🎜🎜#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
----------------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!