Files
kotlin-fork/stdlib/ktSrc/JavaIterablesSpecial.kt
T
Andrey Breslav 4579c9826f Reverting problematic commits:
fa500f453d	Alex Tkachman	Today 19:47
725bebc23f	Alex Tkachman	Today 19:36
2011-12-27 21:26:20 +04:00

86 lines
2.0 KiB
Kotlin

package std.util
// Number of extension function for ava.lang.Iterable that shouldn't participate in auto generation
import java.util.Collection
import java.util.List
import java.util.AbstractList
/**
* Count the number of elements in collection.
*
* If base collection implements Collection<T> interface method Collection<T>#size() will be used.
* Otherwise, this method determines the count by iterating through the all items.
*/
fun <T> java.lang.Iterable<T>.count() : Int {
if (this is Collection<T>) {
return this.size()
}
var number : Int = 0
for (elem in this) {
++number
}
return number
}
/**
* Get the first element in the collection.
*
* Will throw an exception if there are no elements
* TODO: Specify type of the exception
*/
inline fun <T> java.lang.Iterable<T>.first() : T {
if (this is AbstractList<T>) {
return this.get(0)
}
return this.iterator().sure().next()
}
/**
* Get the last element in the collection.
*
* If base collection implements List<T> interface, the combination of size() and get()
* methods will be used for getting last element. Otherwise, this method determines the
* last item by iterating through the all items.
*
* Will throw an exception if there are no elements.
* TODO: Specify type of the exception
*/
fun <T> java.lang.Iterable<T>.last() : T {
if (this is List<T>) {
return this.get(this.size() - 1);
}
val iterator = this.iterator().sure()
var last : T = iterator.next()
while (iterator.hasNext()) {
last = iterator.next()
}
return last;
}
/**
* Checks if collection contains given item.
*
* Method checks equality of the objects with T.equals method.
* If collection implements java.util.AbstractCollection an overridden implementation of the contains
* method will be used.
*/
fun <T> java.lang.Iterable<T>.contains(item : T) : Boolean {
std.io.println("!!!!!")
if (this is java.util.AbstractCollection<T>) {
return this.contains(item);
}
for (var elem in this) {
if (elem.equals(item)) {
return true
}
}
return false
}