【Java 8 新特性】使用Concat对Streams, Lists, Sets, Arrays进行拼接合并的示例
在这个页面上,我们将提供Java8 Concat对流(Strean)、列表(List)、集合(Set)和数组(Array)合并的示例。Stream提供concat()方法来连接两个流并返回一个流。为了连接列表(List)、集合(Set)和数组(Array),我们首先将它们转换成流,然后使用concat()将它们组合起来。可以使用toList()、toSet()等收集器的方法将输出流转换为List、
【Java 8 新特性】使用Concat对Streams, Lists, Sets, Arrays进行拼接合并的示例
在这个页面上,我们将提供
Java8 Concat
对流(
Strean
)、列表(
List
)、集合(
Set
)和数组(
Array
)合并的示例。
Stream
提供concat()
方法来连接两个流并返回一个流。
为了连接列表(List
)、集合(Set
)和数组(Array
),我们首先将它们转换成流,然后使用concat()
将它们组合起来。可以使用toList()
、toSet()
等收集器的方法将输出流转换为List
、Set
等。
在java doc中Stream.concat()
方法的声明
static <T> Stream<T> concat(Stream<? extends T> a, Stream<? extends T> b)
concat()
创建怠惰连接的流。
此流包含第一个流的所有元素,后跟第二个流的所有元素。
如果两个输入流都被排序,则结果流将被排序。
如果两个流中的任何一个是并行的,则生成的流将是并行的。
下面我们来看具体的示例
1.Concat Streams
这里我们将使用concat()
连接两个流实例。
ConcatStreamsDemo.java
package com.concretepage;
import java.util.stream.Stream;
public class ConcatStreamsDemo {
public static void main(String[] args) {
Stream<String> s1 = Stream.of("AA", "BB", "CC");
Stream<String> s2 = Stream.of("AA", "BB", "DD");
Stream<String> s = Stream.concat(s1, s2);
s.forEach(e->System.out.print(e+" "));
//Remove duplicates using distinct()
s1 = Stream.of("AA", "BB", "CC");
s2 = Stream.of("AA", "BB", "DD");
System.out.println("\nRemove duplicates using distinct()");
s = Stream.concat(s1, s2).distinct();
s.forEach(e->System.out.print(e+" "));
}
}
输出
AA BB CC AA BB DD
Remove duplicates using distinct()
AA BB CC DD
2.Concat Lists
在这个例子中,我们有两个列表。这些列表将被转换成流,然后使用concat()
方法连接它们。输出流转化成列表(List
)将使用Collectors.toList()
方法. 为了得到不同的元素,我们需要使用Stream.distinct()
方法 .
ConcatListsDemo.java
package com.concretepage;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class ConcatListsDemo {
public static void main(String[] args) {
List<Book> list1 = new ArrayList<>();
List<Book> list2 = new ArrayList<>();
{
list1.add(new Book("Core Java", 200));
list1.add(new Book("Spring MVC", 300));
list1.add(new Book("Learning Freemarker", 150));
list2.add(new Book("Core Java", 200));
list2.add(new Book("Spring MVC", 300));
list2.add(new Book("Learning Hibernate", 400));
}
List<Book> list = Stream.concat(list1.stream(), list2.stream()).collect(Collectors.toList());
list.forEach(b->System.out.println(b.getName()+", "+ b.getPrice()));
//Remove duplicates using distinct()
System.out.println("--Remove duplicates using distinct()--");
list = Stream.concat(list1.stream(), list2.stream()).distinct().collect(Collectors.toList());
list.forEach(b->System.out.println(b.getName()+", "+ b.getPrice()));
}
}
Book.java
package com.concretepage;
public class Book {
private String name;
private int price;
public Book(String name, int price) {
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public int getPrice() {
return price;
}
@Override
public boolean equals(final Object obj) {
if (obj == null) {
return false;
}
final Book book = (Book) obj;
if (this == book) {
return true;
} else {
return (this.name.equals(book.name) && this.price == book.price);
}
}
@Override
public int hashCode() {
int hashno = 7;
hashno = 13 * hashno + (name == null ? 0 : name.hashCode());
return hashno;
}
}
输出
Core Java, 200
Spring MVC, 300
Learning Freemarker, 150
Core Java, 200
Spring MVC, 300
Learning Hibernate, 400
--Remove duplicates using distinct()--
Core Java, 200
Spring MVC, 300
Learning Freemarker, 150
Learning Hibernate, 400
3.Concat Arrays
在这个例子中,我们有两个数组。这些数组将被转换成流,然后使用concat()
方法连接它们。输出流转化成数组(Array
)将使用Stream.toArray()
方法. 为了得到不同的元素,我们需要使用Stream.distinct()
方法.
ConcatArraysDemo.java
package com.concretepage;
import java.util.stream.Stream;
public class ConcatArraysDemo {
public static void main(String[] args) {
Book[] bk1 = new Book[3];
Book[] bk2 = new Book[3];
{
bk1[0] = new Book("Core Java", 200);
bk1[1] = new Book("Spring MVC", 300);
bk1[2] = new Book("Learning Freemarker", 150);
bk2[0] = new Book("Core Java", 200);
bk2[1] = new Book("Spring MVC", 300);
bk2[2] = new Book("Learning Hibernate", 400);
}
Book[] bks = (Book[]) Stream.concat(Stream.of(bk1), Stream.of(bk2)).toArray(b -> new Book[b]);
for(Book b : bks) {
System.out.println(b.getName()+", "+ b.getPrice());
}
//Remove duplicates using distinct()
System.out.println("--Remove duplicates using distinct()--");
bks = (Book[]) Stream.concat(Stream.of(bk1), Stream.of(bk2)).distinct().toArray(b -> new Book[b]);
for(Book b : bks) {
System.out.println(b.getName()+", "+ b.getPrice());
}
}
}
输出
Core Java, 200
Spring MVC, 300
Learning Freemarker, 150
Core Java, 200
Spring MVC, 300
Learning Hibernate, 400
--Remove duplicates using distinct()--
Core Java, 200
Spring MVC, 300
Learning Freemarker, 150
Learning Hibernate, 400
4.Concat Sets
我们有两个集合(Set
)。这些集合将被转换为流,然后使用concat()
方法连接它们。输出流转化成集合(Set
)将使用Collectors.toSet()
方法.
ConcatSetsDemo.java
package com.concretepage;
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class ConcatSetsDemo {
public static void main(String[] args) {
Set<Book> set1 = new HashSet<>();
Set<Book> set2 = new HashSet<>();
{
set1.add(new Book("Core Java", 200));
set1.add(new Book("Spring MVC", 300));
set1.add(new Book("Learning Freemarker", 150));
set2.add(new Book("Core Java", 200));
set2.add(new Book("Spring MVC", 300));
set2.add(new Book("Learning Hibernate", 400));
}
Set<Book> set = Stream.concat(set1.stream(), set2.stream()).collect(Collectors.toSet());
set.forEach(b->System.out.println(b.getName()+", "+ b.getPrice()));
}
}
输出
Spring MVC, 300
Learning Freemarker, 150
Learning Hibernate, 400
Core Java, 200
参考文献
【1】Java Doc - Interface Stream
【2】Java 8 Concat Streams, Lists, Sets, Arrays Example
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)