feat(facade): add maximum method for ListWrapper
This commit is contained in:
parent
5c95b376b5
commit
b5c4d8ba79
|
@ -217,6 +217,27 @@ class ListWrapper {
|
||||||
if (end == null) return len;
|
if (end == null) return len;
|
||||||
return end < 0 ? max(len + end, 0) : min(end, len);
|
return end < 0 ? max(len + end, 0) : min(end, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static maximum(List l, fn(item)) {
|
||||||
|
if (l.length == 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
var solution = null;
|
||||||
|
var maxValue = double.NEGATIVE_INFINITY;
|
||||||
|
for (var index = 0; index < l.length; index++) {
|
||||||
|
var candidate = l[index];
|
||||||
|
if (candidate == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
var candidateValue = fn(candidate);
|
||||||
|
if (candidateValue > maxValue) {
|
||||||
|
solution = candidate;
|
||||||
|
maxValue = candidateValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return solution;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isListLikeIterable(obj) => obj is Iterable;
|
bool isListLikeIterable(obj) => obj is Iterable;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import {isJsObject, global, isPresent, isArray} from 'angular2/src/facade/lang';
|
import {isJsObject, global, isPresent, isBlank, isArray} from 'angular2/src/facade/lang';
|
||||||
|
|
||||||
export var List = global.Array;
|
export var List = global.Array;
|
||||||
export var Map = global.Map;
|
export var Map = global.Map;
|
||||||
|
@ -266,6 +266,26 @@ export class ListWrapper {
|
||||||
}
|
}
|
||||||
static toString<T>(l: List<T>): string { return l.toString(); }
|
static toString<T>(l: List<T>): string { return l.toString(); }
|
||||||
static toJSON<T>(l: List<T>): string { return JSON.stringify(l); }
|
static toJSON<T>(l: List<T>): string { return JSON.stringify(l); }
|
||||||
|
|
||||||
|
static maximum<T>(list: List<T>, predicate: (T) => number): T {
|
||||||
|
if (list.length == 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
var solution = null;
|
||||||
|
var maxValue = -Infinity;
|
||||||
|
for (var index = 0; index < list.length; index++) {
|
||||||
|
var candidate = list[index];
|
||||||
|
if (isBlank(candidate)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
var candidateValue = predicate(candidate);
|
||||||
|
if (candidateValue > maxValue) {
|
||||||
|
solution = candidate;
|
||||||
|
maxValue = candidateValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return solution;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function isListLikeIterable(obj: any): boolean {
|
export function isListLikeIterable(obj: any): boolean {
|
||||||
|
|
|
@ -76,6 +76,20 @@ export function main() {
|
||||||
it('should respect the startIndex parameter',
|
it('should respect the startIndex parameter',
|
||||||
() => { expect(ListWrapper.indexOf(l, 1, 1)).toEqual(-1); });
|
() => { expect(ListWrapper.indexOf(l, 1, 1)).toEqual(-1); });
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('maximum', () => {
|
||||||
|
it('should return the maximal element',
|
||||||
|
() => { expect(ListWrapper.maximum([1, 2, 3, 4], x => x)).toEqual(4); });
|
||||||
|
|
||||||
|
it('should ignore null values',
|
||||||
|
() => { expect(ListWrapper.maximum([null, 2, 3, null], x => x)).toEqual(3); });
|
||||||
|
|
||||||
|
it('should use the provided function to determine maximum',
|
||||||
|
() => { expect(ListWrapper.maximum([1, 2, 3, 4], x => -x)).toEqual(1); });
|
||||||
|
|
||||||
|
it('should return null for an empty list',
|
||||||
|
() => { expect(ListWrapper.maximum([], x => x)).toEqual(null); });
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('StringMapWrapper', () => {
|
describe('StringMapWrapper', () => {
|
||||||
|
|
Loading…
Reference in New Issue