의 합이 ArrayList
반복되지 않을 가능성이 있습니까?
PHP는 sum(array)
배열의 합계를 제공합니다.
PHP 코드는 다음과 같습니다.
$a = array(2, 4, 6, 8);
echo "sum(a) = " . array_sum($a) . "\n";
Java에서도 똑같이하고 싶었습니다.
List tt = new ArrayList();
tt.add(1);
tt.add(2);
tt.add(3);
답변
한번 자바 -8출시되었습니다 (2014 년 3 월) . 스트림 을 사용할 수 있습니다 .
당신이 List<Integer>
int sum = list.stream().mapToInt(Integer::intValue).sum();
그것이 int[]
int sum = IntStream.of(a).sum();
답변
그런 다음 직접 작성하십시오.
public int sum(List<Integer> list) {
int sum = 0;
for (int i : list)
sum = sum + i;
return sum;
}
답변
루프를 사용하는 유일한 대안은 재귀를 사용하는 것입니다.
다음과 같은 방법을 정의 할 수 있습니다.
public static int sum(List<Integer> ints) {
return ints.isEmpty() ? 0 : ints.get(0) + ints.subList(1, ints.length());
}
이것은 일반 루프를 사용하는 것에 비해 매우 비효율적이며 목록에 많은 요소가 있으면 폭발 할 수 있습니다.
스택 오버플로를 피하는 대안은 사용하는 것입니다.
public static int sum(List<Integer> ints) {
int len = ints.size();
if (len == 0) return 0;
if (len == 1) return ints.get(0);
return sum(ints.subList(0, len/2)) + sum(ints.subList(len/2, len));
}
이것은 비효율적이지만 스택 오버플로를 방지합니다.
같은 것을 쓰는 가장 짧은 방법은
int sum = 0, a[] = {2, 4, 6, 8};
for(int i: a) {
sum += i;
}
System.out.println("sum(a) = " + sum);
인쇄물
sum(a) = 20
답변
다음과 같은 유틸리티 함수를 작성하십시오.
public class ListUtil{
public static int sum(List<Integer> list){
if(list==null || list.size()<1)
return 0;
int sum = 0;
for(Integer i: list)
sum = sum+i;
return sum;
}
}
그런 다음
int sum = ListUtil.sum(yourArrayList)
답변
나에게 가장 명확한 방법은 다음과 같습니다.
doubleList.stream().reduce((a,b)->a+b).get();
또는
doubleList.parallelStream().reduce((a,b)->a+b).get();
내부 루프도 사용하지만 루프 없이는 불가능합니다.
답변
Apache commons-collections API를 사용할 수 있습니다.
class AggregateClosure implements org.apache.commons.collections.Closure {
int total = 0;
@Override
public void execute(Object input) {
if (input != null) {
total += (Integer) input;
}
}
public int getTotal() {
return total;
}
}
그런 다음 아래와 같이이 클로저를 사용합니다.
public int aggregate(List<Integer> aList) {
AggregateClosure closure = new AggregateClosure();
org.apache.commons.collections.CollectionUtils.forAllDo(aList, closure);
return closure.getTotal();
}
답변
map 함수에 대해 알고 있다면 맵이 재귀 루프 또는 재귀 루프 일 수도 있음을 알고 있습니다. 그러나 분명히 당신은 그것을 위해 각 요소에 도달해야합니다. 그래서 일부 구문이 일치하지 않지만 매우 짧은 것을 원했기 때문에 Java 8을 해결할 수 없었습니다.
int sum = 0
for (Integer e : myList) sum += e;