Set是不能存储相同元素集合,而且是无序的
1 Set定义初始化
val feeds1 = Set("blog.toolshed.com", "pragdave.me", "blog.agiledeveloper.com") val feeds2 = Set("blog.toolshed.com", "martinfowler.com/bliki")
2 Set过滤filter和转换成字符串mkString
如果我们只是想更新从 feeds1 中选择的feed,如所有包含有“blog”这个词的,那么我们可以使用filter()方法来获取这些feed。
val blogFeeds = feeds1 filter (_ contains "blog") println(s"blog feeds: ${blogFeeds.mkString(", ")}")
我们将会得到如下输出:
blog feeds: blog.toolshed.com, blog.agiledeveloper.com
mkString()方法为Set 中的每一个元素都创建了一个对应的字符串表示形式,并将结果与参数字符串(在这个例子中的逗号)拼接起来。
3 Set集合合并
如果要合并两个 Set 的feed 来创建一个新的Set,那么我们可以使用++()方法:
val mergedFeeds = feeds1 ++ feeds2 println(s"# of merged feeds: ${mergedFeeds.size}")
同一个元素将最多只会被Set 存储一次:
# of merged feeds: 4
4 Set集合求交集 &方法
如果要确定我们和某个朋友所订阅的多个 feed 中相同的部分,那么我们可以导入朋友的feed,并执行求交集操作(即调用&()方法):
val commonFeeds = feeds1 & feeds2 println(s"common feeds: ${commonFeeds.mkString(", ")}")
下面是在前面提到的两个 feed Set 上执行求交集操作之后的结果:
common feeds: blog.toolshed.com
5 Set集合遍历操作map,foreach
如果要在每个 feed 的前面加上一个“http://”字符串前缀,我们可以使用map()方法。这将对每个元素应用给定的函数值、将结果收集到一个Set 中,并最终返回这个Set:
val urls = feeds1 map ("http://" + _) println(s"One url: ${urls.head}")
我们将会看到下面的结果:
One url: http://blog.toolshed.com
最后,当我们准备好循环遍历这些feed 并一个一个地刷新它们的时候,我们可以使用内置的迭代器foreach()方法,如下所示:
println("Refresh Feeds:") feeds1 foreach { feed => println(s" Refreshing $feed...") }
下面是输出结果:
Refresh Feeds: Refreshing blog.toolshed.com... Refreshing pragdave.me... Refreshing blog.agiledeveloper.com...