Skip to content

Commit e702ce7

Browse files
committed
Add support for the pullAt().
1 parent 55f8977 commit e702ce7

File tree

2 files changed

+50
-1
lines changed
  • lodash-plugin/src

2 files changed

+50
-1
lines changed

lodash-plugin/src/main/java/com/github/underscore/lodash/$.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,10 @@ public Chain<List<?>> flattenDeep() {
8787
public Chain<List<Object>> pull(Object ... values) {
8888
return new Chain<List<Object>>($.pull((List<Object>) value(), values));
8989
}
90+
91+
public Chain<List<Object>> pullAt(Integer ... indexes) {
92+
return new Chain<List<Object>>($.pullAt((List<Object>) value(), indexes));
93+
}
9094
}
9195

9296
public static Chain chain(final String item) {
@@ -200,7 +204,7 @@ public List<T> flattenDeep() {
200204

201205
public static List<Object> pull(final List<Object> list, Object ... values) {
202206
final List<Object> valuesList = Arrays.asList(values);
203-
for (Iterator<Object> iterator = list.iterator(); iterator.hasNext(); ) {
207+
for (final Iterator<Object> iterator = list.iterator(); iterator.hasNext(); ) {
204208
final Object object = iterator.next();
205209
if (valuesList.contains(object)) {
206210
iterator.remove();
@@ -213,6 +217,25 @@ public List<Object> pull(Object ... values) {
213217
return pull((List<Object>) getIterable(), values);
214218
}
215219

220+
public static List<Object> pullAt(final List<Object> list, Integer ... indexes) {
221+
final List<Object> result = newArrayList();
222+
final List<Integer> indexesList = Arrays.asList(indexes);
223+
int index = 0;
224+
for (final Iterator<Object> iterator = list.iterator(); iterator.hasNext(); ) {
225+
final Object object = iterator.next();
226+
if (indexesList.contains(index)) {
227+
result.add(object);
228+
iterator.remove();
229+
}
230+
index += 1;
231+
}
232+
return result;
233+
}
234+
235+
public List<Object> pullAt(Integer ... indexes) {
236+
return pullAt((List<Object>) getIterable(), indexes);
237+
}
238+
216239
public static void main(String ... args) {
217240
final String message = "Underscore-java-lodash is a lodash plugin for underscore-java.\n\n"
218241
+ "For docs, license, tests, and downloads, see: http://javadev.github.io/underscore-java";

lodash-plugin/src/test/java/com/github/underscore/lodash/LodashTest.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,32 @@ public void pull() {
221221
assertEquals("[1, 1]", array.toString());
222222
}
223223

224+
/*
225+
var array = [5, 10, 15, 20];
226+
var evens = _.pullAt(array, 1, 3);
227+
228+
console.log(array);
229+
// → [5, 15]
230+
231+
console.log(evens);
232+
// → [10, 20]
233+
*/
234+
@Test
235+
public void pullAt() {
236+
List<Object> array = new ArrayList<Object>(asList(5, 10, 15, 20));
237+
List<Object> events = $.pullAt(array, 1, 3);
238+
assertEquals("[5, 15]", array.toString());
239+
assertEquals("[10, 20]", events.toString());
240+
array = new ArrayList<Object>(asList(5, 10, 15, 20));
241+
events = new $(array).pullAt(1, 3);
242+
assertEquals("[5, 15]", array.toString());
243+
assertEquals("[10, 20]", events.toString());
244+
array = new ArrayList<Object>(asList(5, 10, 15, 20));
245+
events = $.chain(array).pullAt(1, 3).value();
246+
assertEquals("[5, 15]", array.toString());
247+
assertEquals("[10, 20]", events.toString());
248+
}
249+
224250
@Test
225251
public void main() {
226252
$.main(new String[] {});

0 commit comments

Comments
 (0)